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