为了账号安全,请及时绑定邮箱和手机立即绑定

如何设置具有两个外键的实体?

如何设置具有两个外键的实体?

C#
qq_笑_17 2021-05-10 17:57:23
我有一个实体,该实体有两个指向其自己的表的外键。看起来是这样的: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属性。但是,这给了我以下错误:无法确定类型'SystemUser'和'SystemUser'之间的关联的主要终点。必须使用关系流利的API或数据注释显式配置此关联的主要端。如果我删除其中的一个(无论哪个,都没关系),它都可以正常工作,但是由于某种原因,对于同时拥有它们,我感到困惑。我尝试ForeignKey在每个属性上添加属性,以及使用流畅的API进行如下配置两者都不起作用。有什么办法可以做到吗?仅供参考,我没有使用Code First。我正在手动编写数据库脚本,仅使用EF作为ORM。不知道这些信息是否相关,但我想还是会给它。
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

看起来您会想要包含类似


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);


查看完整回答
反对 回复 2021-05-23
  • 1 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信