ADO.NET实体数据模型允许循环外键引用

时间:2008-12-09 19:32:42

标签: asp.net entity-framework dynamic-data

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

据我所知,我的选择是:

  • 以某种方式更改DynamicData FieldTemplates中的ForeignKey _ edit.ascx。这是有问题的,因为我无法看到如何获取对当前实体的键的引用,以将其从可能的外部键选项中删除。此外,这可能会破坏任何非分层的fkey引用密钥恰好碰撞的用法。

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

  • 某种插入/更新触发器,如果​​匹配自身,则强制ParentID为null。这不好,因为从用户的角度来看,它无声地失败。

有没有人有更好的方法?另外,如果我需要提供更多详细信息,请与我们联系。

-Kelly

1 个答案:

答案 0 :(得分:1)

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