使用nHibernate将两个不同的数据模型映射到一个实体模型
我有两个不同的数据模型映射到同一个汽车实体。我需要创建第二个名为ParkedCar的实体,它与Car相同(因此继承自Car),以阻止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
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" ...