1

我在 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; }
}
4

2 回答 2

1

当您使用Take(10)函数时,将根据您的 RDBMS 功能运行基础全选查询
然后将返回前 10 个结果(分页

由于您不使用ORDER BY表达式,因此由于分页和 RDBMS 功能,相同的查询将导致多次执行不同。

希望有用。

于 2013-02-07T21:17:50.947 回答
0

它可能与此有关:

(10) 多态性(可选,默认为隐式):确定是使用隐式还是显式查询多态。

隐式多态性意味着类的实例将由命名任何超类或实现的接口或类的查询返回,并且类的任何子类的实例将由命名类本身的查询返回。显式多态性意味着类实例将仅返回显式命名该类的查询,并且命名该类的查询将仅返回在此声明中映射为 a 或 的子类的实例。对于大多数目的,默认值 polymorphism="implicit" 是合适的。当两个不同的类映射到同一个表时,显式多态很有用(这允许“轻量级”类包含表列的子集)。

因此,您可以使用以下方法修复映射:Polymorphism.Explicit();

前任。

public class FooMap : pcm.Mappings.ProjectBaseMapTemplate<Foo> 
{
    public FooMap()
    {
        Polymorphism.Explicit();
        Map(x=> x.ProjectState).Column("project_state");
    }
}
于 2013-02-07T22:05:05.693 回答