我有一个看起来像这样的实体:
public class Driver
{
IVehicle Vehicle {get;set;}
}
和几个实现IVehicle(汽车,自行车,火车......)的不同类
如何选择我的驱动程序所具有的IVehicle的具体实现,并在下次从数据库加载驱动程序时记住此选择?
我正在使用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");
}
}
此外,我需要从驱动程序映射
禁用车辆的延迟加载答案 0 :(得分:1)
您需要确定继承映射的工作方式。请参阅文档http://nhibernate.info/doc/nh/en/index.html#inheritance
一旦这样做,您可以映射您的Driver类以级联Vehicle依赖项。在那之后,NHibernate将自动从数据库中加载正确的项目。
<强>更新强>
您需要将类型名称保留为字符串。然后您的Vehicle类可以是一个未映射的属性,它可以执行以下操作:
public class Driver
{
private string vehicleTypeName;
private IVehicle vehicle;
public IVehicle Vehicle
{
get
{
if (vehicle == null)
{
vehicle = typeof(IVehicle).Assembly
.CreateInstance(vehicleTypeName);
}
return vehicle;
}
}
}