2012-07-30 15 views
0

我有以下域實體對象:流利-的NHibernate ICompositeUserType爲域實體對象

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

我建議

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"); 
} 
+0

謝謝,我還沒有得到又嘗試了這一點的機會,但它看起來很有希望。一旦我有機會實施它,我會鏈接回去。 – oonyalo 2012-08-02 18:09:42

+0

這工作,謝謝。 – oonyalo 2012-10-10 16:11:45