C# 如何将未持久化的对象附加到使用NHIbernate从DB加载的对象
我有一个实体,看起来像这样:C# 如何将未持久化的对象附加到使用NHIbernate从DB加载的对象,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有一个实体,看起来像这样: public class Driver { IVehicle Vehicle {get;set;} } 以及实现IVehicle的几个不同类别(汽车、自行车、火车……) 如何选择我的驱动程序所持有的iHicle的具体实现,并在下次从DB加载驱动程序时记住此选择 我使用NHibernate 3.0进行持久化,使用FluentNHibernate进行映射 编辑 好吧,我终于明白了。我需要以以下方式映射车辆和每个子类: public void VehicleMa
public class Driver
{
IVehicle Vehicle {get;set;}
}
以及实现IVehicle的几个不同类别(汽车、自行车、火车……)
如何选择我的驱动程序所持有的iHicle的具体实现,并在下次从DB加载驱动程序时记住此选择
我使用NHibernate 3.0进行持久化,使用FluentNHibernate进行映射
编辑
好吧,我终于明白了。我需要以以下方式映射车辆和每个子类:
public void VehicleMap : ClassMap<IVehicle>
{
public VehicleMap()
{
Id(v => v.Id); // Needed to add a property which will be used as Id
DiscriminateSubClassesOnColumn("TYPE");
}
}
public void CareMap : SubclassMap<Car>
{
public CarMap()
{
DiscriminatorValue("CAR");
}
}
public void VehicleMap:ClassMap
{
公共车辆地图()
{
Id(v=>v.Id);//需要添加一个用作Id的属性
区分子类子列(“类型”);
}
}
公共void CareMap:子类映射
{
公共CarMap()
{
鉴别器值(“CAR”);
}
}
此外,我需要从驱动程序映射中禁用车辆的延迟加载您需要决定继承映射的工作方式。请参阅文档 一旦您这样做了,您就可以映射您的驱动程序类以级联车辆依赖关系。在此之后,NHibernate将自动从数据库中加载适当的项 更新 您需要将类型名称作为字符串持久化。然后,您的车辆类别可以是一个未映射的属性,其功能如下:
public class Driver
{
private string vehicleTypeName;
private IVehicle vehicle;
public IVehicle Vehicle
{
get
{
if (vehicle == null)
{
vehicle = typeof(IVehicle).Assembly
.CreateInstance(vehicleTypeName);
}
return vehicle;
}
}
}
问题是不同的车辆没有保存在数据库中。也许我的例子不好,所以我会尝试用另一种方式来解释:不同的工具在我的系统中不是实体,它们是实用程序类,它们都以不同的方式实现了特定的方法。我需要找出一种方法来为每个驱动程序保存要使用的类(我在创建时选择了合适的类,我希望tham的选择被记住..谢谢,尽管我找到了一种不同的方法(用解决方案编辑了我的问题)