c# - 抽象类和 Fluent Nhibernate

标签 c# oop inheritance interface fluent-nhibernate

我的域有一个名为 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/

相关文章:

c++ - 在 C++ 中什么时候应该使用类还是结构?

c++ - 为什么 "this"在具有多个基类的类的父类中发生变化?

java - 在 Java 中显式调用默认方法

python - 在运行时重置/重新加载嵌套类的类属性

c# - Windows Phone 在应用程序恢复时运行代码

c# - MSSQL参数消耗更多时间

c# - 使用 XPath 和 C# 移动多个 iFrame

Ruby:创建不可继承的类方法

C# 创建一个列表来保存基类的任何派生子项

c# - 计算圆内坐标