开发者

How to map inheritance with property returned other inheritance?

I have abstract class Vehicle and two classes that derive from: Car and ForkLift.

public abstract class Vehicle
{
    public EngineBase Engine { get; set; } 
}

public class Car : Vehicle
{
    public GasEngine Engine { get; set; }
}

public class ForkLift : Vehicle
{
    public ElectricEngine Engine { get; set; }
}

and Engine clasess:

public abstract class EngineBase
{
}

public class GasEngine : EngineBase
{
}

public class ElectricEngine : EngineBase
{
}

Engi开发者_Go百科nes are mapped with "table per class hierarchy". With Vehicles I want to use the same pattern.

How to map Engine class and derived with that Engine property?

How to do it with lazy-loading?


That code does not compile, which makes it improbable that you can map it.


Use a protected field in Vehicle and map it with an access strategy:

public abstract class Vehicle
{
    protected Engine _engine;
}

In Fluent NHibernate this would be mapped:

References(x => x.Engine, "EngineId").Access.CamelCaseField(Prefix.Underscore);

Then the classes that extend Vehicle can cast it as needed:

public class Car : Vehicle
{
    public GasEngine
    {
        get { return (GasEngine)_engine; }
        set { _engine = Value; }
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜