1

我在一个简单的数据库上使用新的 ADO.NET 实体数据模型。我有一个表/实体,它有一个主键 (PageID) 和一个 ParentID 外键,它在 PageID 上为父/子“0..1 到多”关系引用回自身。在 ASP.Net 页面上,我使用带有 asp:DynamicControl 的 FormView 将其表示为控件。除了一个关键细节外,该部分工作正常:当页面呈现时,可能的父项列表包括其自身,并且将项目设置为具有自身的父项不会导致错误并保存到数据库中。显然,分层对象不应该有自己的父对象,那么我该如何限制这种行为呢?

据我所知,我的选择是:

  • 以某种方式更改_DynamicData FieldTemplates 中的 ForeignKey edit.ascx。这是有问题的,因为我看不到如何获取对当前实体键的引用以将其从可能的键选择中删除。另外,这可能会在键碰巧发生碰撞的情况下处理任何非分层 fkey refs 用法。

  • 在页面上做一些 PreRender jiggery-pokery 尝试从渲染的 DropDownList 中删除 ListItem。这似乎不是正确的方法,因为它只为相关页面修复它。编辑:这就是我目前解决它的方式。

  • 某种插入/更新触发器强制 ParentID 为空,如果它匹配自己。这不好,因为从用户的角度来看,它会默默地失败。

有没有人有更好的方法?另外,如果我需要提供更多细节,请告诉我。

-凯利

4

1 回答 1

1

我最终将层次结构移动到组装表,因为我必须存储的不仅仅是父/子关系。这样做还意味着我可以转储 DynamicData 控件并使用更直观的 TreeView 和拖放服务器端事件 (ComponentArt)。由于控件的性质,没有项目可以是它自己的父项,因此问题没有实际意义。哇,在我第一次使用 Entity Framework 时,7 个月是很长的时间了 :)

于 2009-07-17T21:06:58.467 回答