配置EF Fluent API为1对多但两次

时间:2018-05-29 13:49:34

标签: c# entity-framework asp.net-core entity-framework-core

我的模型如下。

public class Holder
{
  ...
  public List<Thing> Future { get;set; }
  public List<Thing> Past { get;set; }
}

public class Thing 
{
  ...
  public Holder Holder { get; set; }
}

现在我尝试使用Fluent API告诉DB,每个Holder在将来只能有很多东西,而且过去也有很多东西。事物只能是未来或过去,但永远不能同时存在,所以事物只与单个持有者相关,但持有者可能有多个事物(分布在两个数组之间)。

我最好的经验是以下内容。

private static void OnModelCreating(EntityTypeBuilder<Thing> entity)
{
  ...
  entity.HasOne(_ => _.Holder).WithMany(_ => _.Future);
  entity.HasOne(_ => _.Holder).WithMany(_ => _.Past);
}

但是,当我尝试创建迁移时,EF会这样抱怨它。

  

无法在'Holder.Future'和'Thing.Holder'之间建立关系,因为'Holder.Past'和'Thing.Holder'之间已经存在关联。导航属性只能参与一个关系。

我不确定如何以正确和正确的方式解决它。我唯一能解决的问题是声明一个类 FutureThing PastThing ,有效地复制了源代码。那是丑陋和糟糕的。

这是一个有点不寻常的场景,所有的谷歌搜索引出了设置简单关系的方法。我正在使用Core 2,我希望有一些东西可以促进这种情况。

我该如何计算?

0 个答案:

没有答案