当前位置:  开发笔记 > 编程语言 > 正文

EF Code First,将两个导航属性映射到同一对象类型

如何解决《EFCodeFirst,将两个导航属性映射到同一对象类型》经验,为你挑选了1个好方法。

如果我有 User具有以下属性类:

    public Guid UserPreferenceId { get; set; }
    public virtual DefaultUserPreference UserPreference { get; set; }

    public Guid SecondaryUserPreferenceId { get; set; }
    public virtual DefaultUserPreference SecondaryUserPreference { get; set; }

如何通过流畅的API获取此信息?当我尝试运行它时,它说:

在表'Users'上引入FOREIGN KEY约束可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.无法创建约束.查看以前的错误.

我已经看过其中一些问题,但它们总是涉及一个导航属性和一个集合.这种关系也是单向的,但如果必须是双向的,可能是双向的,不确定是否重要.



1> Richard..:

实体框架默认创建与Cascade Delete on的关系.创建从一个实体到另一个实体的两个关系会尝试创建两个级联删除关系,数据库将抛出您看到的错误.

使用Code-First Fluent配置删除一个或两个关系上的级联删除:

modelBuilder.Entity()
    .HasOptional(u => u.UserPreference)
    .WithMany()
    .WillCascadeOnDelete(false);
modelBuilder.Entity()
    .HasOptional(u => u.SecondaryUserPreference)
    .WithMany()
    .WillCascadeOnDelete(false);

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有