修改
我有一个界面,我想基于一些课程。当我转到BuildSchema(或UpdateSchema)时,Nhibernate会为接口创建一个表。我以为我找到了一个解决方法如下:
接口和类:
public interface ILevel
{
int Id { get; set; }
string Name { get; set; }
}
public abstract class Level : ILevel
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class LevelOne : Level { }
public class LevelTwo : Level { }
映射:
public class LevelMap : ClassMap<ILevel>
{
public LevelMap()
{
Id(x => x.Id);
Map(x => x.Name);
}
}
public class LevelOneMap : SubclassMap<LevelOne>
{
}
public class LevelTwoMap : SubclassMap<LevelTwo>
{
}
这不起作用(我做了另一个UpdateSchema并出现了讨厌的ILevel表。)
是否有一个我完全忽略接口/抽象类的配置?
答案 0 :(得分:2)
对于单独的表LevelOne和LevelTwo,它们都具有Level / ILevel属性,使用Level的通用映射:
public abstract class LevelMap<T> : ClassMap<T>
where T : Level // ILevel should work, too
{
protected LevelMap()
{
Id(x => x.Id);
Map(x => x.Name);
}
}
public class LevelOneMap : LevelMap<LevelOne>
{
}
public class LevelTwoMap : LevelMap<LevelTwo>
{
}
您提供了两个单独的类映射,而没有告诉Fluent真正的类层次结构。