0

У меня возникли проблемы с созданием отношений с использованием Fluent NHibernate. Вообще, у меня есть две таблицы ресурсов & элементы:Fluent NHibernate сложные (?) Отношения

Resource & Items

пожалуйста, обратите внимание, что ПК в таблице ресурсов является одновременно идентификатор и локали. Это означает, что у одного элемента может быть немного ресурсов (одинаковый идентификатор, но другой язык).

потому что это не одно к одному простому отношению. У меня возникают проблемы с отображением этих двух, используя Fluent 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) 
    } 
}