0

我有麻煩創建關係使用流利NHibernate。 一般情況下,我有兩個表,資源&項目:流利NHibernate複雜(?)的關係

Resource & Items

請注意在資源表PK既是ID和語言環境。這意味着,一個項目實際上可以擁有很少的資源(相同的id但區域設置不同)。

因爲它不是一對一的簡單關係我有麻煩映射這兩個使用流利NHibernate。

什麼是解決這個問題的正確方法?

非常感謝!

+0

它是一個多對多的關係,也就是說一個給定的資源(通過它的'{id,locale}'組合鍵來標識)是否被不同的項目引用? – Alex

+0

一般沒有。但聽起來像使用多對多的設計可以使它更簡單的沒有? – rotem

回答

0

如果關係是這樣的,一個給定的Resource由單個給定Item資,這可能是仿照這樣的(注:只有事情包括零部件)

public class Item 
{ 
    public virtual int Id { get; protected set; } 
    public virtual IList<Resource> Resources { get; protected set; } 
    // Constructor, Equals, GetHashCode, other things ... omitted. 
} 

public class Resource 
{ 
    public virtual Item Owner { get; protected set; } 
    public virtual int ResourceId { get; protected set; } 
    public virtual string Locale { get; protected set; } 
    public virtual string Value { get; protected set; } 
    // Constructor, Equals, GetHashCode, other things ... omitted. 
} 

,並創建下面的類圖:

public class ItemMap : ClassMap<Item> 
{ 
    public ItemMap() 
    { 
     WithTable("items"); 
     Id(x => x.Id); // add Id generation cfg if needed 
     HasMany(x => x.Resources) 
      .Inverse() 
      .Cascade.All() 
    } 
} 

public class ResourceMap : ClassMap<Resource> 
{ 
    public ResourceMap() 
    { 
     WithTable("resources") 
     CompositeId() 
      .KeyProperty(x => x.ResourceId) 
      .KeyProperty(x => x.Locale); 
     References(x => x.Owner) 
    } 
}