1

現在、テーブルを使用して 2 つの異なる種類のエンティティを格納し、テーブルの列を使用してそれらを区別していますintTypeId

エンティティ会社:

       public CompanyMap
       {
            Table("tblTable");
            Id(x => x.Id, "intId");
            Map(x => x.TypeId, "intTypeId");
            Map(x => x.Name, "strCompanyName");
            ...
       }

実体人物:

       public PersonMap
       {
            Table("tblTable");
            Id(x => x.Id, "intId");
            Map(x => x.TypeId, "intTypeId");
            Map(x => x.Name, "strPersonName");
            ...
       }

これらの 2 つのモデルを 1 つのテーブルにマッピングしました。Web ページではうまく機能しているように見えますが、一部の永続性仕様テストに違反し、例外がスローされます。

Company のテストでは、列"strPersonName"が ではないことが示さNULLれ、Person のテストでは、列"strCompanyName"が ではないことが示されていますNULL。これら 2 つのマップのいずれか 1 つを削除すると、テストに合格します。

なぜこれが起こるのか教えてください。

4

2 に答える 2

1

この回答に基づいて、Fluent NHフィルターを試してみます

CompanyisintTypeId=1Personisであると仮定するとintTypeId=2、次の 2 つのフィルター クラスを定義できます。

public class PersonConditionFilter : FilterDefinition
{
    public PersonConditionFilter()
    {
        WithName("PersonCondition").WithCondition("intTypeId=2");
    }
}

public class CompanyConditionFilter : FilterDefinition
{
    public CompanyConditionFilter()
    {
        WithName("CompanyCondition").WithCondition("intTypeId=1");
    }
}

次に、マッピングでこれらのフィルターを使用します。

 public PersonMap()
{
    Table("tblTable");
    Id(x => x.Id, "intId");
    Map(x => x.TypeId, "intTypeId");
    Map(x => x.Name, "strPersonName");
    ApplyFilter<PersonConditionFilter>();
}


public CompanyMap ()
{
    Table("tblTable");
    Id(x => x.Id, "intId");
    Map(x => x.TypeId, "intTypeId");
    Map(x => x.Name, "strCompanyName");
    ApplyFilter<CompanyConditionFilter>();
}

最後に、セッション レベルでフィルターを有効にすることを忘れないでください。

session.EnableFilter("CompanyCondition");
session.EnableFilter("PersonCondition");

var persons = session.QueryOver<Person>().List();
var companies = session.QueryOver<Company>().List();
于 2013-11-26T14:26:05.163 に答える