2008-12-09 71 views
1

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

据我所看到的,我的选择是:

  • 不知何故改变ForeignKey的_ edit.ascx在DynamicData FieldTemplates。这是有问题的,因为我看不到如何获得对当前实体的主要密钥的引用,以将其从可能的外部关键选择中移除。另外,这将潜在地锁定键发生碰撞的任何非等级fkey refs用法。

  • 在页面上执行一些PreRender jiggery-pokery,尝试从呈现的DropDownList中移除ListItem。这看起来并不像正确的方式,因为它只修复了有问题的页面。编辑:这是我目前正在解决它。

  • 某种形式的插入/更新触发器,如果​​匹配它自己,则强制ParentID为null。这是不好的,因为它从用户的角度静默失败。

有没有人有更好的方法?另外,让我知道是否需要提供更多细节。

-Kelly

回答

1

我结束了层次移动到组装表,因为我不得不存储不仅仅是父/子关系更多。这样做也意味着我可以转储DynamicData控件,并使用更直观的用户界面的TreeView和拖放式服务器端事件(ComponentArt)。由于控制的性质,没有项目可能是它自己的父项,所以问题没有实际意义。哇,7个月是我第一次体验Entity Framework的很长一段时间:)