2

Я пытаюсь сопоставить две таблицы:Свободно NHibernate Композитный Mapping

  • первый имеет идентификатор (IDA) и поле с идентификатором (КОР) другой таблицы.
    • другой имеет составной ключ, основанный на предыдущем идентификатором (IDB) и другой (idB2)

Идея заключается в том, что вторая таблица содержит описание раскола на нескольких строк.

Моей текущей реализацией является следующее, но я не могу получить частичное описание, необходимое для конкатенации. Как мне изменить свое отображение на работу? Есть идеи? :)

public class A 
{ 
    long idA 
    lond idB 
    string fullDescription 
} 


public class B 
{ 
    long idB 
    long idB2 
    strind partialDescription 
} 

public class AMap : ClassMap<A> 
{ 
    public AMap() 
    { 
     Table("A"); 
     Id(x => x.id).Column("idA").GeneratedBy.Native(); 
     Map(x => x.idB).Column("idB") 
     HasMany(x => x.B).KeyColumn("idB").Inverse().Cascade.All().Not.LazyLoad(); 
    } 
} 

public class BMap : ClassMap<B> 
{ 
    public BMap() 
    { 
     Table("B"); 
     CompositeId() 
      .KeyReference(x => x.A, "idB") 
      .KeyProperty(x => x.idB2, "idB2"); 
     Map(x => x.partialDescription, "desc").CustomType("AnsiString"); 
    } 
} 

ответ

1

В самом деле, по вашему описанию, вы должны иметь это другой сценарий:

public class A 
{ 
    public virtual long Id { get; set; } 
    public virtual IList<B> PartialDescriptions { get; protected set; } 
    public string fullDescription 
    { 
     get 
     { 
      StringBuilder description = new StringBuilder(); 
      foreach (var partial in PartialDescriptions) 
      { 
       description.Append(partial); 
      } 

      return description.ToString(); 
     } 
    } 
} 

public class B 
{ 
    public virtual long Id { get; set; } 
    public virtual long Id2 { get; set; } 
    public virtual string Description { get; set; } 
} 

Затем попытайтесь реализовать свои карты класса, как это:

public class BMap : ClassMap<B> 
{ 
    public BMap() 
    { 
     Table("B"); 
     CompositeId() 
      .KeyReference(x => x.Id, "idB") 
      .KeyProperty(x => x.Id2, "idB2"); 
     Map(x => x.partialDescription, "desc").CustomType("AnsiString"); 
    } 
} 

public class AMap : ClassMap<A> 
{ 
    public AMap() 
    { 
     Table("A"); 
     Id(x => x.Dd).Column("idA").GeneratedBy.Native(); 
     HasMany(x => x.PartialDescriptions) 
      .KeyColumn("idB") 
      .Inverse() 
      .Cascade.All() 
      .Not.LazyLoad(); 
    } 
} 

ПРИМЕЧАНИЕ: Я не пытался скомпилировать этот код. Я только ожидаю, что вы сможете взять генерала.

Я рекомендую вам ознакомиться с Getting started section Fluent NHibernate для получения дополнительной информации.

+0

Большое вам спасибо! Мне пришлось немного изменить код, но ваша идея была отличной. :)) – user2271375

Смежные вопросы