Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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_Hbm - Fatal编程技术网

使用nHibernate将两个不同的数据模型映射到一个实体模型

使用nHibernate将两个不同的数据模型映射到一个实体模型,nhibernate,hbm,Nhibernate,Hbm,我有两个不同的数据模型映射到同一个汽车实体。我需要创建第二个名为ParkedCar的实体,它与Car相同(因此继承自Car),以阻止nhibernate抱怨同一实体存在两个映射 public class Car { protected Car() { IsParked = false; } public virtual int Id { get; set; } public bool IsParked { get; intern

我有两个不同的数据模型映射到同一个汽车实体。我需要创建第二个名为ParkedCar的实体,它与Car相同(因此继承自Car),以阻止nhibernate抱怨同一实体存在两个映射

public class Car
{
     protected Car()
     {
       IsParked = false;
     }

    public virtual int Id { get; set; }  
    public  bool IsParked { get; internal set; }
}

public class ParkedCar : Car
{
        public ParkedCar()
        {
            IsParked = true;
        }
       //no additional properties to car, merely exists to support mapping and signify the                           car is parked
}
唯一的问题是,当我使用Criteria API从数据库检索汽车时,如下所示:

SessionProvider.OpenSession.Session.CreateCriteria<Car>()
                    .Add(Restrictions.Eq("Id", 123))
                    .List<Car>();
SessionProvider.OpenSession.Session.CreateCriteria()
.添加(限制。等式(“Id”,123))
.List();
查询将从ParkedCar数据模型中返回车辆实体。似乎nhibernate默认为专业实体。这些映射在正确的位置:

<class name="Car" xmlns="urn:nhibernate-mapping-2.2" table="tblCar">

<class name="ParkedCar" xmlns="urn:nhibernate-mapping-2.2" table="tblParkedCar" >


如何停止此操作?

由于ParkedCar扩展了Car,对Car的查询将同时返回Car和ParkedCar对象。您可以使用HQL限制类型,例如,从Car c开始,其中c.class=Car。我认为你不能用CriteriaAPI来实现这一点


或者,如果列表的大小合理,您可以在检索后对其进行筛选。

我认为您需要在


我不明白为什么要首先分离表。您是否可以使用NHibernate来查询
“IsParked=true”
中的汽车?解释这种情况的原因需要花费很长时间。基本上,在应用程序中,我们构建的某些实体在某些时候需要以完全不同的方式存储,但我们希望保护应用程序不受此影响。但您根本没有保护应用程序不受此影响。您的应用程序需要知道当两个对象都具有相同的功能时,何时查询一辆汽车,或何时查询一辆停放的汽车。我想说的是,一个不同的体系结构将完全缓解做这种事情的需要。如果不了解应用程序或其域模型,就不能做出这样的声明。你在这里的目标是什么?你不是在问问题,也不是在帮我。在我的案例中,抽象出它们之间的差异是正确的做法。应用程序知道基于IsParked属性的preform的正确查询。谢谢!!我希望事情就这么简单。
<class "Car" polymorphism="explicit" ...