我有一个实体,它有两个外键给它自己的表。这就是它的样子:
public class SystemUser : BaseModel
{
[Column("SystemUserId")]
public override Guid ID { get; set; }
public string Username { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string MobilePhone { get; set; }
public Guid? MobilePhoneProviderId { get; set; }
public virtual MobilePhoneProvider MobilePhoneProvider { get; set; }
public Guid? ManagerId { get; set; }
public virtual SystemUser Manager { get; set; }
public Guid? AdminAssistantId { get; set; }
public virtual SystemUser AdminAssistant { get; set; }
public bool IsActive { get; set; }
public bool SendEmail { get; set; }
public string FinaleUsername { get; set; }
public string FinalePassword { get; set; }
public int? FloatUserId { get; set; }
public Guid? SystemUserTypeId { get; set; }
public virtual SystemUserType SystemUserType { get; set; }
public Guid? SystemUserJobFunctionId { get; set; }
public virtual SystemUserJobFunction SystemUserJobFunction { get; set; }
public Guid? SystemUserJobRoleId { get; set; }
public virtual SystemUserJobRole SystemUserJobRole { get; set; }
public Guid? SystemUserLocationId { get; set; }
public virtual SystemUserLocation SystemUserLocation { get; set; }
public virtual ICollection<SystemUserRole> Roles { get; set; }
}
请注意AdminAssistant
和Manager
属性。但它给了我以下错误:
无法确定之间关联的主要结束 类型&#39; SystemUser&#39;和&#39; SystemUser&#39;。这个的主要目的 必须使用以下任一方式显式配置关联 关系流畅的API或数据注释。
如果我删除其中一个(任何一个,它并不重要),它可以正常工作但由于某种原因,它会让两个人感到困惑。我尝试在每个属性上添加ForeignKey
属性,并使用流畅的API对其进行如下配置:
modelBuilder.Entity<SystemUser>()
.HasOptional(x => x.Manager)
.WithMany()
.HasForeignKey(x => x.ManagerId);
modelBuilder.Entity<SystemUser>()
.HasOptional(x => x.AdminAssistant)
.WithMany()
.HasForeignKey(x => x.AdminAssistantId);
都没有奏效。我有什么方法可以做到这一点吗?
仅供参考我没有使用Code First。我手动编写数据库脚本,只使用EF作为ORM。不确定这些信息是否相关,但我还是认为我还是会给它。
答案 0 :(得分:3)
看起来你想要包含类似
的内容ICollection<SystemUser> ManagedUsers {get; set;}
ICollection<SystemUser> AdminAssistedUsers {get; set;}
然后你应该可以做这样的事情:
modelBuilder.Entity<SystemUser>()
.HasOptional(x => x.Manager)
.WithMany(x => x.ManagedUsers)
.HasForeignKey(x => x.ManagerId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<SystemUser>()
.HasOptional(x => x.AdminAssistant)
.WithMany(x => x.AdminAssistedUsers)
.HasForeignKey(x => x.AdminAssistantId)
.WillCascadeOnDelete(false);