我在EF4 CTP5中定义了一个模型,只有当id的值大于0时,才需要映射一个继承的实体。代码看起来像这样。
public class Parent
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Child : Parent
{
public int SchoolID { get; set; }
}
在OnModelCreating方法中......
modelBuilder.Entity<Parent>().Map<Child>(
reg =>
{
reg.MapInheritedProperties();
reg.Requires("SchoolID").HasValue((int)<value greater than 0); <== Pseudo code
}).ToTable("Users");
这种事情有可能吗?如果没有,是否可以完全忽略鉴别器?
答案 0 :(得分:1)
不确定'是否可能'部分,但它闻起来有点香味。我的意思是,它意味着你的数据意味着真的不应该有意义;你最终会遇到长期可维护性问题。鉴别器不仅仅是帮助ORM找出哪种类型的记录,它也应该是(imo)对你正在处理的类型的逻辑描述,因为人类对数据库运行SQL查询。它还可用于帮助索引分区。我知道TPH无论如何都是一种非规范化,但是你仍然希望能够设计一个索引良好的数据库与那里的数据库。
我建议让EF根据类型名称为你做鉴别器,iirc是默认值。