簡體   English   中英

抽象類和流利的Nhibernate

[英]Abstract classes and 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();
}

它實現了接口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);
    }
}

因此,現在我有兩輛可以履行合同的車輛,並且有不同的駕駛方式。

效果很好,所以在我的應用程序中的其他地方,我可以有一個這樣的方法,我們很高興

public string DoDrive(ICar c)
    {
        return c.Drive();
    }

但是現在我希望我的Car對象能夠使用流暢的nhibernate持久化到數據庫中。 我只希望一輛桌子的汽車,以及卡車和跑車都在同一桌子上。 我可以創建一個枚舉來確定它是跑車還是卡車。 多數民眾贊成在不是一個peoblem。 但是我該如何映射我的汽車對象。

我不能使用抽象類為休眠

謝謝!

如果您希望所有汽車都保存在同一張表中,則需要實現一種稱為表“每個類層次結構”的映射策略。

首先,如下映射您的抽象類:

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);
    }
}

Reda是正確的,但是在子類映射中,u應該引用孩子。 例如:

public class SportCarMap : SubclassMap<SportCar>
{
    public SportCarMap()
    {
        DiscriminatorValue("SportCar");

        //If your Sport Car has specific properties:
        //Map(x => x.BrakeHorsePower);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM