NHibernate不根据元数据的正确类型过滤数据库
我有一个接口(IContactable),它由3个类实现:Person、Department、RestUnitNHibernate不根据元数据的正确类型过滤数据库,nhibernate,c#-4.0,fluent-nhibernate,Nhibernate,C# 4.0,Fluent Nhibernate,我有一个接口(IContactable),它由3个类实现:Person、Department、RestUnit public interface IContactable { Contact Contact { get; set; } string Title { get; } int? Id { get; set; } } public class Person:IContactable public class Department:IContactable public c
public interface IContactable
{
Contact Contact { get; set; }
string Title { get; }
int? Id { get; set; }
}
public class Person:IContactable
public class Department:IContactable
public class RestUnit:IContactable
还有另一个类Contact,它应该维护这些对象中的哪一个是Contact实体的所有者。完成此工作的联系人映射的一部分是:
ReferencesAny(p => p.Contactable)
.EntityTypeColumn("ContactableType")
.EntityIdentifierColumn("ContactableId")
.IdentityType<int>()
.AddMetaValue<Person>("Person")
.AddMetaValue<Department>("Department")
.AddMetaValue<RestUnit>("RestUnit");
一切正常,但过滤数据。当我想获得某些特定联系人时,比如部门类型,我会写下如下内容:
var contacts = Repository<Contact>.Find(p=>p is Department);
预期查询:
select .......... from contact.[Contact] where ContactableType='Department'
所以NHibernate使用了一种错误的类型。int而不是字符串。我认为NH正在使用列表中对象的索引,AddMetaValue(“Department”)已将Department类型添加到 我希望解释得足够清楚
我用的是NH3
有什么想法吗?您是否尝试添加一行额外内容:
ReferencesAny(p=>p.Contactable)
.MetaType()
您是否尝试添加额外的行:
ReferencesAny(p=>p.Contactable)
.MetaType()
非常有趣的问题。你曾经解决过这个问题吗?没有,不幸的是,无论如何都找不到解决这个非常有趣的问题的方法。你解决过这个问题吗?没有,不幸的是,无论如何都找不到解决这个问题的方法
select .......... from contact.[Contact] where ContactableType=1
select .......... from contact.[Contact] where ContactableType='Department'