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的选择被记住..谢谢,尽管我找到了一种不同的方法(用解决方案编辑了我的问题)