0

编辑

我有一个接口,我想以此为基础创建一些类。当我转到 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 表)。

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

4

1 回答 1

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

于 2012-07-30T15:10:54.290 回答