Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net ADO.NET实体数据模型允许循环外键引用_Asp.net_Entity Framework_Dynamic Data - Fatal编程技术网

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

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

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

据我所知,我的选择是:

  • 以某种方式更改DynamicDataFieldTemplates中的ForeignKey
    \uuz
    edit.ascx。这是有问题的,因为我看不到如何获取对当前实体主键的引用以将其从可能的外键选择中删除。此外,这可能会在关键帧发生碰撞的情况下使用任何非层次fkey refs

  • 在页面上执行一些预渲染jiggery扑克,尝试从渲染的DropDownList中删除ListItem。这似乎不是正确的方法,因为它只为有问题的页面修复它。编辑:这就是我目前正在解决的问题

  • 某种insert/update触发器,如果ParentID与自身匹配,则强制其为null。这是不好的,因为从用户的角度来看,它会无声地失败

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


-Kelly

我最终将层次结构移动到了一个集合表中,因为我必须存储的不仅仅是父/子关系。这样做还意味着我可以转储dynamicata控件,并使用用户更直观的树状视图来拖放服务器端事件(ComponentArt)。由于控件的性质,任何项都不能是它自己的父项,因此该问题没有实际意义。哇,7个月是我第一次体验实体框架的很长时间:)

我最终将层次结构移动到了一个组装表中,因为我必须存储的不仅仅是父/子关系。这样做还意味着我可以转储dynamicata控件,并使用用户更直观的树状视图来拖放服务器端事件(ComponentArt)。由于控件的性质,任何项都不能是它自己的父项,因此该问题没有实际意义。哇,7个月是我第一次体验实体框架的很长时间:)