我在 FNH 中有两个非常相似的查询,作用于类似的类,Project 和 Foo。Foo 只是一个从 Project 派生的新本地类。它的 classMap 也是从 Project 的 classMap 派生的。
public class Foo:pcm.Domain.Project { }
public class FooMap : pcm.Mappings.ProjectMapBase<Foo> { }
这是我的查询,使用相同的会话:
var list = session.Query<Project>()
.Take(10)
.ToList();
var list2 = session.Query<foo>()
.Take(10)
.ToList();
Assert.Equal(list.Count(),list2.Count());
断言失败,因为 list 有 30 个元素,而 list2 有 10 个。确实只有 10 个项目。
编辑:这是基础的映射,它位于它自己的 DLL 中。
public class ProjectBaseMapTemplate<T> : ClassMap<T> where T: ProjectBase
{
public ProjectBaseMapTemplate()
{
Table("proj");
Id(x => x.MasterKey, "master_key");
Map(x => x.ProjectName).Column("project_name");
Map(x => x.ProjectTitle, "project_title");
}
}
public class ProjectBaseMap : ProjectBaseMapTemplate<ProjectBase> { }
这是派生类,它位于另一个 DLL 中。将类分离到 DLL 中对于我需要如何使用 FNH 至关重要。
public class Foo:pcm.Domain.ProjectBase
{
public virtual int ProjectState{ get; set; }
}
public class FooMap : pcm.Mappings.ProjectBaseMapTemplate<Foo>
{
public FooMap()
{
Map(x=> x.ProjectState).Column("project_state");
}
}
更新这里是 ProjectBase
public class ProjectBase
{
public virtual string MasterKey { get; set; }
public virtual string ProjectName { get; set; }
public virtual string ProjectTitle { get; set; }
}