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

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 回答