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

时间:2012-07-27 18:21:52

标签: 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; 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表。)

是否有一个我完全忽略接口/抽象类的配置?

1 个答案:

答案 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真正的类层次结构。