【发布时间】:2020-10-28 04:13:27
【问题描述】:
我开始使用 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)。尽管从具有现有 FK 约束的现有数据库构建脚手架时它工作得很好。
我在这里错过了什么?
干杯
【问题讨论】:
-
您在错误消息中有
FxDealsTradedHere,而不是在提供的代码中。为什么? -
嗨 Roman 感谢您指出这一点。我编辑了帖子。唯一的原因是简单的对象和属性名称(实际值无关紧要,我认为更短的可读性更好)并且我忘记对错误输出进行相同的调整。道歉。
-
注意异常信息:“手动配置关系”。
标签: c# .net-core entity-framework-core ef-code-first entity-framework-migrations