0

次のドメインエンティティオブジェクトがあります。

public class Report
{
    public virtual int Id { get; set; }
    public virtual int Score { get; set; }
    public virtual EntityType Type { get; set; }
    public virtual Object Entity { get; set; }
}

public class Category 
{ 
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

public class Topic
{ 
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

Report.Entityは、カテゴリまたはトピックのいずれかになります。タイプはReport.Typeで示されます。EntityTypeは列挙型です。目標は、fluent-nhibernateを使用してレポートクラスを保存できるようにすることです。ICompositeUserTypeを使用してこれを達成できると思います。これにより、次のようになります。

public class Report
{
    public virtual int Id { get; set; }
    public virtual int Score { get; set; }
    public virtual EntityCompositeUserType Entity { get; set; }
    public virtual EntityType Type { get; set; }
}

私の質問は次のとおりです。EntityCompositeUserTypeクラスのNullSafeGetメソッドがドメインエンティティオブジェクト(CategoryまたはTopic)を返すようにすることは可能ですか?私が見たICompositeUserTypeのすべての例は、現在のテーブルの列から(私の場合は、レポートテーブルの列から)新しいオブジェクトを作成します。複数のテーブルの列を使用することについての言及が1つありましたが、その実装はわかりませんでした。

4

1 に答える 1

1

私は提案します

public class Report
{
    public virtual int Id { get; set; }
    public virtual int Score { get; set; }
    public virtual Entity Entity { get; set; }
}

public class Category : Entity
{ 
    public virtual string Name { get; set; }
}

public class Topic : Entity
{ 
    public virtual string Name { get; set; }
}

public class Entity
{ 
    public virtual int Id { get; set; }
}

public ReportMap()
{
    ReferenceAny(x => x.Entity)...
        .EntityIdentifierColumn("entirtyid")
        .EntityTypeColumn("entitytype")
        .IdentityType<int>()
        .MetaType<string>()
        .AddMetaValue<Category>("category")
        .AddMetaValue<Topic>("topic");
}
于 2012-07-31T12:36:43.667 に答える