我有两个班级:
class User {
public int Id { get;set; }
public string Name { get; set; }
}
class VerifiedUser : User {
public ICollection<Verified> { get; set; }
}
我希望NHibernate将VerifiedUser
和User
视为同一个表,但将它们分开,所以。
Session.Query<User>() //would return a User
Session.Query<VerifiedUser>() //would return a VerifiedUser
这可能还是不受支持?
答案 0 :(得分:0)
您需要在映射类中使用Fluent Nhiberate实施table-per-hierarchy
策略。这些类似于FNH的AutoMapping功能(如果使用)的覆盖,否则映射类是事实上的,您将习惯它们。
类似的东西:
public class UserMappingOverride : IAutoMappingOverride<User>
{
public void Override(AutoMapping<User> mapping)
{
mapping.DiscriminateSubClassesOnColumn("IsVerified").Not.Nullable();
}
}
public class VerifiedUserClassMap : SubclassMap<VerfiedUser>
{
public VerifiedUserClassMap()
{
DiscriminatorValue("Yes");
}
}
回答你的问题,是的,就我记得在这里无所事事而言:Session.QueryOver<VerifiedUser>()
因为NHibernate会在鉴别器的where子句中加上