域实体对象的Fluent-NHibernate ICompositeUserType

时间:2012-07-30 16:20:07

标签: .net nhibernate fluent-nhibernate

我有以下域实体对象:

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方法返回域实体对象(类别或主题)?我见过的所有ICompositeUserType示例都是从当前表中的列创建一个新对象(在我的情况下,从Report表中的列创建)。我看到一个提到使用多个表中的列但没有看到它的实现。

1 个答案:

答案 0 :(得分: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");
}