【发布时间】:2023-03-23 19:54:01
【问题描述】:
我尝试使用实体框架以 TPC 样式映射一些类,但出现以下错误:
错误:类型“A”无法按定义映射,因为它映射 从使用实体拆分或其他类型的继承属性 继承的形式。要么选择不同的继承映射 策略,以便不映射继承的属性,或更改所有类型 映射继承属性和不使用拆分的层次结构。
当我使用以下类时会出现此错误:
public abstract class BaseEntityTest
public abstract class BaseEntityTest2 : BaseEntityTest
public abstract class BaseEntityTest3 : BaseEntityTest2
public class A: BaseEntityTest3 // this class is the only one with a table in the db
在 OnModelCreating 方法中我添加了以下代码来获取 TPC 映射
modelBuilder.Entity<A>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("A");
});
当我从结构中排除 BaseEntityTest2(以便 A 仅从 BaseEntityTest 而不是 BaseEntityTest2 继承)时,错误消失了。这是否意味着无法创建此映射,或者我只是错过了什么?
编辑:
类的属性:
public abstract class BaseEntityTest
{
[Key]
public Guid Id { get; set; }
public String Info { get; set; }
[Required]
public DateTime CreationDate { get; set; }
[Required]
public String CreationUser { get; set; }
[Required]
public DateTime ModificationDate { get; set; }
[Required]
public String ModificationUser { get; set; }
[ConcurrencyCheck]
[Required]
public int LockVersion { get; internal set; }
}
public abstract class BaseEntityTest2 : BaseEntityTest
{
[Required]
public string Name { get; set; }
public string Description { get; set; }
}
public abstract class BaseEntityTest3: BaseEntityTest2
{
[Required]
public DateTime FromDate { get; set; }
public DateTime ThruDate { get; set; }
}
public class A: BaseEntityTest3{
public String Test { get; set; }
}
【问题讨论】:
-
这是全貌吗?在我住的地方工作正常:)(VS2012,EF 5)。
-
我用 EF 4.3.1 (VS 2012) 试过这个
-
你的类有什么属性?
标签: entity-framework inheritance multiple-inheritance