我有以下域实体对象:
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表中的列创建)。我看到一个提到使用多个表中的列但没有看到它的实现。
答案 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");
}