EF核心代码-到同一主体实体的多个外键关系

时间:2020-07-07 20:09:16

标签: c# .net-core entity-framework-core ef-code-first entity-framework-migrations

我从数据库优先的方法开始使用EF Core,我有两个表CalendarDatesDeals。交易具有多个与日期相关的属性,已为其设置了单独的外键关系。在下面的示例StartDateEndDate中。

scaffolded DbContext显示了这样的类定义:

    public class CalendarDate
    {
        public CalendarDate()
        {
            DealsStartedOnThatDate = new HashSet<Deal>();
            DealsEndedOnThatDate = new HashSet<Deal>();
        }

        [Key]
        public string Id { get; set; } = string.Empty;
        public DateTimeOffset Date { get; set; }
        public int Year { get; set; }

        public virtual ICollection<Deal> DealsStartedOnThatDate { get; set; }
        public virtual ICollection<Deal> DealsEndedOnThatDate { get; set; }
    }

    public class Deal
    {        
        [Key]
        public string Id { get; set; } = string.Empty;
        public string Name { get; set; } = string.Empty;

        public string StartDateId { get; set; } = string.Empty;
        public virtual CalendarDate StartDate { get; set; } = null!;

        public string EndDateId { get; set; } = string.Empty;
        public virtual CalendarDate EndDate { get; set; } = null!;
    }

我现在想转向代码优先。但是,当我添加迁移时,会引发以下错误:

无法确定类型为“ ICollection ”的导航属性“ CalendarDate.DealsStartedOnThatDate”表示的关系。要么手动配置关系,要么使用“ [NotMapped]”属性或“ OnModelCreating”中的“ EntityTypeBuilder.Ignore”忽略此属性。

如果我在两个类中都注释掉属于EndDate的字段,它就可以正常工作。因此,似乎在这里我不能使用多个MANY:ONE关系(many = Deals,one = CalendarDates)。 Althoug在具有FK约束的现有数据库中安装支架时,效果很好。

我在这里想念什么?

欢呼

1 个答案:

答案 0 :(得分:1)

请尝试像这样在OnModelCreating中配置关系

modelBuilder.Entity<Deal>().HasOne(cd => cd.StartDate)
            .WithMany(c => c.DealsStartedOnThatDate).HasForeignKey(d => d.StartDateId);

modelBuilder.Entity<Deal>().HasOne(cd => cd.EndDate)
           .WithMany(c => c.DealsEndedOnThatDate).HasForeignKey(d => d.EndDateId);

编辑:选中并修复