我的域有一个名为 Car 的对象。它有几个属性
public abstract class Car : ICar
{
public int Id { get; set; }
public string Name { get; set; }
public string Model { get; set; }
public string Color { get; set; }
public abstract string Drive();
}
它实现接口(interface)ICar
public interface ICar
{
string Color { get; set; }
int Id { get; set; }
string Model { get; set; }
string Name { get; set; }
string Drive();
}
现在我希望有两种继承类型。他们继承了Car,并实现了ICar。
class SportCar: Car, ICar
{
public override string Drive()
{
return ("vroooomvroooomvroooomvroooom i'm a sports car - "+ Name);
}
}
和
class Truck: Car, ICar
{
public override string Drive()
{
return ("grrrrrrrrrrrr i'm a sports truck- " + Name);
}
}
所以现在我有两辆履行契约(Contract)的车辆,并且有不同的驾驶方式。
很酷
这工作得很好,所以在我的应用程序的其他地方我可以有这样的方法,我们很高兴
public string DoDrive(ICar c)
{
return c.Drive();
}
但现在我希望使用 fluent nhibernate 将我的 Car 对象持久保存到数据库中。 我只想要一张 table Car,卡车和跑车在同一张 table 上。我可以创建一个枚举来识别它是跑车还是卡车。那不是一个人。但是如何映射我的汽车对象。
我不能为 nhibernate 使用抽象类
谢谢!
最佳答案
如果你想让你所有的车都保存在同一个表中,你需要实现一个名为table per class hierarchy的映射策略。 .
首先,将您的抽象类映射如下:
public class CarMap : ClassMap<Car>
{
public CarMap()
{
Id(x => x.Id);
Map(x => x.Color);
Map(x => x.Model);
Map(x => x.Name);
DiscriminateSubClassesOnColumn("Type");
}
}
该表将有一个“类型”列。这称为鉴别器列。
然后映射所有具体类。每个具体类都有一个“鉴别器值”:
public class SportCarMap : SubclassMap<Car>
{
public SportCarMap()
{
DiscriminatorValue("SportCar");
//If your Sport Car has specific properties:
//Map(x => x.BrakeHorsePower);
}
}
public class TruckMap : SubclassMap<Car>
{
public TruckMap()
{
DiscriminatorValue("Truck");
//If your Truck has specific properties:
//Map(x => x.MaxLoad);
}
}
关于c# - 抽象类和 Fluent Nhibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18089383/