我从数据库优先的方法开始使用EF Core,我有两个表CalendarDates
和Deals
。交易具有多个与日期相关的属性,已为其设置了单独的外键关系。在下面的示例StartDate
和EndDate
中。
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约束的现有数据库中安装支架时,效果很好。
我在这里想念什么?
欢呼
答案 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);
编辑:选中并修复