我有一个包含多个表和实体框架EDMX模型的数据库。假设我有以下简化结构。
表:人士 专栏:PersonId(PK)
表:父母 专栏:PersonId(PK,FK)
表:儿童
栏目:PersonId(PK,FK)
专栏:ParentId(FK)
为简洁起见,我删除了其他列。 PersonId是所有表中的主键,它是从Parent和Child表到Person表的外键。 Child也通过ParentId列与Parent建立了外键关系。
此外,我在EDMX中进行了配置,因此Parent和Child将BaseType作为Person。现在,当我在Visual Studio中执行“从数据库更新模型...”时,我有一些额外的导航属性。现在Parent实体具有Childs导航属性到Child表,这是正确的,因为Child表中的ParentId外键。但是,Parent表还有Persons导航属性,它是Person实体的列表。我想这是因为Child是派生自Person的,但是我没有看到任何原因,因为我已经将Childs属性添加到后代类(Child)。
我认为它在前段时间工作正常,但现在每次使用“从数据库更新模型”时,我都必须手动删除父和子的冗余关联和导航属性。也许我错过了一些配置,任何帮助都会受到赞赏。
最近我将EF升级到版本6,所以这可能导致了这个问题? 这也是Database First方法。
答案 0 :(得分:0)
实际上Person和Parent表中有很多列,但Child表中只有两列。事实证明,EF将我的Child表视为父与人之间的多对多关系。 基本上,EF将任何表视为多对多关系,如果它只有两列,并且它们都是其他表的外键。 我的修复很明显 - 我只是在Child表中添加了一个新列:
表:儿童
列:PersonId BIGINT非空(PK,FK)
列:ParentId BIGINT非空(FK)
列:ChildIdentity BIGINT标识(1,1)NOT NULL