Fluent nhibernate Fluent Nhibernate:在BuildSchema或UpdateSchema期间忽略接口/抽象类

Fluent nhibernate Fluent Nhibernate:在BuildSchema或UpdateSchema期间忽略接口/抽象类,fluent-nhibernate,Fluent Nhibernate,编辑 我有一个接口,我想在这个接口上创建一些类。当我转到BuildSchema(或UpdateSchema)时,Nhibernate为接口创建一个表。我想我找到了一个解决办法如下: 接口和类: public interface ILevel { int Id { get; set; } string Name { get; set; } } public abstract class Level : ILevel { public virtual int Id { get

编辑

我有一个接口,我想在这个接口上创建一些类。当我转到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>
{
}
公共类级别映射:类映射
{
公共级地图()
{
Id(x=>x.Id);
Map(x=>x.Name);
}
}
公共类LevelOneMap:子类映射
{
}
公共类LevelTwoMap:子类映射
{
}
这不起作用(我做了另一次更新,出现了讨厌的ILevel表)


是否存在我不知道的完全忽略接口/抽象类的配置?

对于单独的表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>
{
}
公共抽象类级别映射:类映射
其中T:Level//ILevel也应该起作用
{
受保护的LevelMap()
{
Id(x=>x.Id);
Map(x=>x.Name);
}
}
公共类LevelOneMap:LevelMap
{
}
公共类LevelTwoMap:LevelMap
{
}

您提供了两个独立的类映射,而不告诉Fluent实际的类层次结构。

您想要什么样的结果?具有Level/ILevel属性的LevelOne和LevelII的两个表?那么你只需要使用ClassMap。是的,这就是目标。我试试看。