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

GBreen12

我有一个实体,该实体的表有两个外键。看起来是这样的:

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

注意AdminAssistantManager属性。但是,这给了我以下错误:

无法确定类型'SystemUser'和'SystemUser'之间的关联的主要终点。必须使用关系流利的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。不知道该信息是否相关,但我想还是会给它。

我245

看起来您会想要包含类似

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在没有(整数)外键的两个实体之间设置关系?

带有两个外键的房间@Relation

带有外键的两个表的休眠联接

如何使用Android Room创建带有两个或更多外键的表?

实体框架核心两个外键-相同表

实体框架核心中的两个外键

如何在Hibernate实体注释中使用两个外键作为主键

如何在实体中声明两个外键作为主键

如何使用实体框架连接两个表并匹配外键

两个带有外键的表引用另一个NameError

如何使用Hibernate创建具有两个外键列的表的实体:未为实体指定标识符:

如何在一个表中创建一个带有 2 个外键的 select 语句,指向两个不同的表

带有两个外键字段指向同一个外模型的模型的 Django 聚合?

我如何正确映射主键由两个外键组成的实体,其中一个外键本身就是复合键?

HIbernate无法删除带有外键的实体。外键设置为空

如何在两个不同的数据库之间的MySQL中设置外键?

有没有办法使单个JPA实体中的两个外键组合唯一?

比较没有外键的两个表

一列有两个外键

具有两个相同外键的Django Inlineformset

INSERT (values) INTO 两个有外键关系的表

如何为具有相同关系的两个外键的模型编写关联?

如何从Django中具有外键关系的两个模型中选择值

如何为具有两个外键的模型创建范围?

当您有两个不同表的外键时如何返回行

如何连接两个外键字段

如何使用两个表的外键记录费用?

如何在django中过滤两个外键

在两个实体之间编码第一个外键