如何处理 Entity Framework Core 中两个表之间的多重关系?
How to handle multiple relationships between two tables in Entity Framework Core?
尊敬的Entity Framework核心专家,
我有两个实体……
public class Account
{
public int AccountId { get; set; }
public Clan? Clan { get; set; }
public int? ClanId { get; set; }
}
public class Clan
{
public int ClanId { get; set; }
public Account Leader { get; set; }
public int LeaderId { get; set; }
public IList<Account>? Officers { get; set; }
public IList<Account>? Members { get; set; }
}
...以下条件适用:
- 一个帐户可能有也可能没有氏族
- 一个氏族总是有一个领袖
- 氏族可能有也可能没有官员
- 部落可能有也可能没有成员
鉴于上述配置,我无法确定我需要编写哪些流畅的映射才能使其工作。如果您能提供任何指导,我们将不胜感激。
我已经查看了其他类似问题的解决方案,但据我所知,其中 none 确实适用于我的情况,因为 Leader
不能是可选的并且删除约定感觉不像是 安全 方法。
非常感谢
我设法让 Entity Framework 核心通过执行以下操作接受迁移...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Clan>().Ignore(clan => clan.Leader);
modelBuilder.Entity<Clan>().Ignore(clan => clan.Officers);
modelBuilder.Entity<Clan>().Ignore(clan => clan.Members);
}
...但是,我不完全确定这是否是解决问题的最佳方法。
更新:事后看来,最初的实体设计感觉很糟糕,所以我添加了一个 ClanTier
枚举,我现在将其用于 Account
上的新 ClanTier
属性,现在 Clan
只有一个 Members
的列表,所以现在它是一个标准的 1:M 关系。两个 类 现在如下所示:
public class Account
{
public int AccountId { get; set; }
public Clan? Clan { get; set; }
public int? ClanId { get; set; }
public ClanTier ClanTier { get; set; }
}
public class Clan
{
public int ClanId { get; set; }
public IList<Account>? Members { get; set; }
}
尊敬的Entity Framework核心专家,
我有两个实体……
public class Account
{
public int AccountId { get; set; }
public Clan? Clan { get; set; }
public int? ClanId { get; set; }
}
public class Clan
{
public int ClanId { get; set; }
public Account Leader { get; set; }
public int LeaderId { get; set; }
public IList<Account>? Officers { get; set; }
public IList<Account>? Members { get; set; }
}
...以下条件适用:
- 一个帐户可能有也可能没有氏族
- 一个氏族总是有一个领袖
- 氏族可能有也可能没有官员
- 部落可能有也可能没有成员
鉴于上述配置,我无法确定我需要编写哪些流畅的映射才能使其工作。如果您能提供任何指导,我们将不胜感激。
我已经查看了其他类似问题的解决方案,但据我所知,其中 none 确实适用于我的情况,因为 Leader
不能是可选的并且删除约定感觉不像是 安全 方法。
非常感谢
我设法让 Entity Framework 核心通过执行以下操作接受迁移...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Clan>().Ignore(clan => clan.Leader);
modelBuilder.Entity<Clan>().Ignore(clan => clan.Officers);
modelBuilder.Entity<Clan>().Ignore(clan => clan.Members);
}
...但是,我不完全确定这是否是解决问题的最佳方法。
更新:事后看来,最初的实体设计感觉很糟糕,所以我添加了一个 ClanTier
枚举,我现在将其用于 Account
上的新 ClanTier
属性,现在 Clan
只有一个 Members
的列表,所以现在它是一个标准的 1:M 关系。两个 类 现在如下所示:
public class Account
{
public int AccountId { get; set; }
public Clan? Clan { get; set; }
public int? ClanId { get; set; }
public ClanTier ClanTier { get; set; }
}
public class Clan
{
public int ClanId { get; set; }
public IList<Account>? Members { get; set; }
}