我有联系表
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一起使用?任何有助于使这种关系发挥作用的帮助都将非常受欢迎。