0

У меня есть сущность:Как сопоставить коллекцию строк из другой таблицы в Fluent NHibernate?

public class Foo 
{ 
    public virtual int Id; 
    public virtual IEnumberable<string> Bars; 
} 

и ее отображение:

public class FooMapping : ClassMap<Foo> 
{ 
    public FooMapping() 
    { 
     Table("foo_table_in_database"); 
     Id(x => x.Id, "Id"); 
     HasMany(x => x.Bars) 
       .AsList() 
       .Table("bars_table_in_db") 
       .Element("BarId", m => 
       {      
        m.Type<string>(); 
       }); 
    } 
} 

И исключение возвращенное внутри объекта insteaf ожидаемого результата :(

базовой = { "не может инициализировать коллекцию: [Loya.Services.CouponsWeb.Promotion.LoyCouponCustomerGroups # 2] [SQL: SELECT loycouponc0_.Promotion_id as Promotion3_0_, loycouponc0_.LoyCustomerGroupId как LoyCusto1_0_, loycouponc0_.Index as Index0_ FROM loy_promotion__cu ...

Таблицы базы данных:

foo_table: * Id, другие свойства

bar_table: * FooId * BARID

Моя цель состоит в том, чтобы получить список BarId (строки) в моем Foo. Как правильно его сопоставить?

ответ

1

Возможно, вам потребуется указать KeyColumn. Я делаю что-то подобное в одном из своих решений, и я бы сопоставить объекты выше, как следует ...

 mapping.HasMany(x => x.Bars) 
      .Schema("Schema") 
      .Table("FooBars") 
      .Element("Bar") 
      .KeyColumn("FooID") 
      .ForeignKeyConstraintName("FK_FooBar_Foo") 
      .Not.Inverse() 
      .Cascade.All() 
      .Fetch.Select(); 

Это даст таблица называется Schema.FooBars. Он будет иметь столбец FooID (который является внешним ключом обратно в таблицу Foo) и столбец Bar, который содержит значение в вашей коллекции Bars.

+0

Уточнение проблемы .KeyColumn («FooId»). Спасибо – evictednoise

+0

Не беспокойтесь - возможно, вы можете быть достаточно хороши, чтобы отметить это как ответ. – amcdermott

+0

Определенно :) – evictednoise

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