【发布时间】:2017-09-08 20:21:35
【问题描述】:
我有 2 个用于用户和组织的模型类。
public class User : IdentityUser
{
[Required]
public string Name { get; set; }
[Required]
public string Surname { get; set; }
public int? OrganizationID { get; set; }
public virtual OrgList org { get; set; }
}
public class OrgList
{
public OrgList()
{
employees = new HashSet<User>();
}
public int id { get; set; }
public String name { get; set; }
public String ownerId { get; set; }
public virtual ICollection<User> employees { get; set; }
public virtual User ownerUser { get; set; }
}
用户可以是某个组织的所有者,也可以是同一组织的员工(但其他员工不能是该组织的所有者)。
首先我为员工创建了关系,它工作正常
modelBuilder.Entity<OrgList>(entity =>
{
entity.HasMany(e => e.employees)
.WithOne(e => e.org)
.HasForeignKey(e => e.OrganizationID)
.OnDelete(DeleteBehavior.SetNull);
}
但是当我尝试为所有者添加另一个关系时
entity.HasOne(e => e.ownerUser)
.WithOne(e => e.org)
.HasForeignKey<OrgList>(e => e.ownerId)
.OnDelete(DeleteBehavior.Cascade);
我在迁移时出错:
无法在“User.org”和 'OrgList.ownerUser',因为两者之间已经存在关系 “OrgList.employees”和“User.org”。导航属性只能 参与单一关系。
我该如何解决?我找到了 EF6(不是 EF Core)的答案,其中包含 EF Core 中不存在的 HasOptional() 和 WithOptionalPrincipal() 方法。
我可以在不为员工创建额外的表或不在用户类上创建额外的virtual OrgList 的情况下做到这一点吗?
【问题讨论】:
标签: c# entity-framework entity-framework-core