私は FNH に 2 つの非常によく似たクエリを持っており、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; }
}