Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate不根据元数据的正确类型过滤数据库_Nhibernate_C# 4.0_Fluent Nhibernate - Fatal编程技术网

NHibernate不根据元数据的正确类型过滤数据库

NHibernate不根据元数据的正确类型过滤数据库,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

我有一个接口(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,它应该维护这些对象中的哪一个是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'