NHibernate不会根据CORRECT TYPE元数据过滤数据

时间:2011-03-09 09:29:38

标签: 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 class RestUnit:IContactable

还有另一个类,Contact,它应该维护这些对象中的哪一个是联系实体的所有者 执行该工作的联系人映射的一部分是:

    ReferencesAny(p => p.Contactable)
     .EntityTypeColumn("ContactableType")
     .EntityIdentifierColumn("ContactableId")
     .IdentityType<int>()
     .AddMetaValue<Person>("Person")
     .AddMetaValue<Department>("Department")
     .AddMetaValue<RestUnit>("RestUnit");

这样数据库中的联系人记录就像(类型被保存为字符串):

X     Y       ContactableType     ContactableId
...  ...        Person              123
...  ...        Person              124 
...  ...        Department          59879   
...  ...        RestUnit              65    
...  ...        Person              3333    
...  ...        Department          35564

一切正常但过滤数据。当我想获得一些特定的联系人时,比如使用部门类型,我会写一些类似的东西:

var contacts = Repository<Contact>.Find(p=>p is Department);

Nhibernate尝试使用整数值过滤基于 ContactableType 字段的数据,但ContactableType列为nvarchar

NHibernate生成的查询:

select .......... from contact.[Contact]  where ContactableType=1

预期查询

select .......... from contact.[Contact]  where ContactableType='Department'

所以NHibernate有点使用错误的类型。 int而不是string 我认为NH正在使用列表中对象的索引 AddMetaValue(“Department”)已将部门类型添加到...

我希望解释清楚得多 我正在使用NH3 ......

任何想法?

1 个答案:

答案 0 :(得分:0)

您是否尝试添加额外的一行:

ReferencesAny(p => p.Contactable)
    .MetaType<string>()