我对 EF Core 中的代码优先有点陌生,我正在尝试一些事情,我有点困惑如何实现以下内容(或者实际上是否可以实现)。
在我的模型中,我有一个将实体映射到案例的类,具有以下映射类
public class CaseEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CaseEntityId { get; set; }
public int CaseId { get; set; }
public CaseModel Case { get; set; }
public Guid EntityId { get; set; }
public EntityModel Entity { get; set; }
}
我现在正在实现该EntityModel
对象。但是,实体可以是 aPerson
或 a Company
。这两者都有共同的属性,但也有一些自然的差异。我想做的是创建一个IEntityModel
接口和两个类,如下所示
public class CaseEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CaseEntityId { get; set; }
public int CaseId { get; set; }
public CaseModel Case { get; set; }
public Guid EntityId { get; set; }
public IEntityModel Entity { get; set; }
}
public interface IEntityModel
{
Guid EntityId { get; set; }
PostalAddress PrincipalAddress { get; set; }
}
public class CompanyEntity : IEntityModel
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid EntityId { get; set; }
public string CompanyName { get; set; }
public PostalAddress PrincipalAddress { get; set; }
}
public class PersonEntity : IEntityModel
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid EntityId { get; set; }
public PostalAddress PrincipalAddress { get; set; }
public string FirstNames { get; set; }
public string Surname { get; set; }
}
当我尝试构建它时,我得到了错误
属性“CaseEntity.Entity”属于接口类型(“IEntityModel”)。如果是导航,请手动配置此属性的关系,方法是将其转换为映射的实体类型。
否则,使用“OnModelCreating”中的 [NotMapped] 属性或“EntityTypeBuilder.Ignore”忽略该属性。
我不是 100% 确定我能做我想做的事。四处搜索让我有点困惑(这是实现类似功能的解决方案,还是我应该使用实现具有支持 aCompany
或 a所需的所有属性的实体类Person
?)