多个零或一对一关系EF 6 Code First

时间:2016-12-30 04:39:23

标签: c# entity-framework entity-framework-6 data-annotations ef-fluent-api

我有联系表

public class Contact : EntityBase
{
    public int TrivialContactProperty { get; set; }
    ...
    public virtual FiContact FiContact { get; set; }
    public virtual PuContact PuContact { get; set; }
    public virtual TrContact TrContact { get; set; }
}

然后是FiContact,PuContact和TrContact表。

public class FiContact : EntityBase
{
    public int TrivialFiProperty { get; set; }
    ...
    public virtual Contact Contact { get; set; }
}

public class PuContact : EntityBase
{
    public int TrivialPuProperty { get; set; }
    ...
    public virtual Contact Contact { get; set; }
}

public class TrContact : EntityBase
{
    public int TrivialTRProperty { get; set; }
    ...
    public virtual Contact Contact { get; set; }
}

联系表应与所有其他三个表具有零关系或一个关系。因此,联系人可以在没有任何其他三个的情况下存在,或者它可以与其中的一个或两个或全部三个相关。

使用流畅的API我在完成some research之后尝试配置它,我想出了:

modelBuilder.Entity<FiContact>()
    .HasRequired(r => r.Contact)
    .WithOptional(o => o.FiContact);

modelBuilder.Entity<PuContact>()
    .HasRequired(r => r.Contact)
    .WithOptional(o => o.PuContact);

modelBuilder.Entity<TrContact>()
    .HasRequired(r => r.Contact)
    .WithOptional(o => o.TrContact);

但是当我尝试为此更改添加迁移时,我仍然收到以下错误:

FiContact_Contact_Source :: Multiplicity在关系'FiContact_Contact'中的角色'FiContact_Contact_Source'中无效。由于“从属角色”属性不是关键属性,因此从属角色的多重性的上限必须为“(此处为星号)”。

PuContact_Contact_Source ::多重性在关系'PuContact_Contact'中的角色'PuContact_Contact_Source'中无效。由于“从属角色”属性不是关键属性,因此从属角色的多重性的上限必须为“(此处为星号)”。

TrContact_Contact_Source :: Multiplicity在关系'TrContact_Contact'中的角色'TrContact_Contact_Source'中无效。由于“从属角色”属性不是关键属性,因此从属角色的多重性的上限必须为“(此处为星号)”。

more research我看到依赖实体上的主键也应该是外键?唯一的问题是我的所有实体都继承自“EntityBase”类,该类定义了所有实体中的公共字段,包括主键:

public abstract class EntityBase : IEntity
{
    [Key]
    public int Id { get; set;}
    public bool IsActive { get; set; }
    public DateTime CreatedOnDate { get; set; }

    public int? CreatedByUserId { get; set; }

    [ForeignKey("CreatedByUserId")]
    public User CreatedByUser { get; set; }

    public DateTime LastUpdatedOnDate { get; set; }
    public int? LastUpdatedByUserId { get; set; }

    [ForeignKey("LastUpdatedByUserId")]
    public User LastUpdatedByUser { get; set; }
}

有没有办法让这种表/实体关系与EF 6 Code First一起使用?任何有助于使这种关系发挥作用的帮助都将非常受欢迎。

0 个答案:

没有答案
相关问题