2012-06-27 5 views
3

У меня возникла проблема с попыткой получить много-много отношений, чтобы сохранить запись соединения в NHibernate с помощью Automapper в Fluent NHibernate.Fluent NHibernate Многие из многих не сохраняют

Есть много других сообщений об этом на S.O, но пока никто из них не решил проблему, задаваясь вопросом, не делаю ли я что-то другое.

У меня есть настройка приложения для сопоставления, и когда я вручную создаю запись соединения в БД, я возвращаю данные, поэтому на уровне чтения он правильно отображает, но он не будет сохраняться.

Вот соответствующее сопоставление. Я использовал automapper с соглашениями по умолчанию, но в итоге попробовал это на основе другого сообщения SO.

.Mappings(m => { 
         m.AutoMappings.Add(AutoMap.AssemblyOf<User>); 
         m.AutoMappings.Add(AutoMap.AssemblyOf<PostalCode>); 
         m.AutoMappings.Add(
           AutoMap.AssemblyOf<VPA>() 
            .Override<VPA>(v => 
             v.HasManyToMany(x => x.PostalCodes) 
              .Table("PostalCodesToVPAs") 
              .ParentKeyColumn("PostalCode_Id") 
              .ChildKeyColumn("VPA_Id") 
              .Cascade.SaveUpdate()) 
            .Override<PostalCode>(p => 
             p.HasManyToMany(x => x.VPAs) 
              .Table("PostalCodesToVPAs") 
              .ParentKeyColumn("VPA_Id") 
              .ChildKeyColumn("PostalCode_Id") 
              .Cascade.SaveUpdate().Inverse()) 
          ); 
        }) 

Мое фактически сохранение выглядит так. Это может быть чрезмерным, поскольку я явно сохраняю как почтовый код, так и vpa, но я много читаю о людях, имеющих проблемы с обратной строкой в ​​сопоставлении, поэтому я хотел попробовать оба. Это не сработало.

var postalCode = new PostalCode {Value ="90210", CreatedBy = 0, CreationDate = DateTime.Now, ModifiedBy = 0, ModifiedDate = DateTime.Now}; 
vpa.PostalCodes.Add(postalCode); 
postalCode.VPAs.Add(vpa); 
PostalCodeService.Save(postalCode); 
VPAService.Save(vpa); 

под одеялом на service.save вызовы делают

return (int)Session.Save(obj); 

Кто-нибудь видел это и знаю, почему это не было бы сохранить присоединиться запись?

ответ

4

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

Вы должны обернуть вызов сохранения в транзакции или не зафиксировать запись соединения. Я закончил тем, что изменил этот код обслуживания на

using (var tx = Session.BeginTransaction()) { 
    Session.Save(obj) 
    tx.commit(); 
    return obj.Id; 
} 

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

  • Нет связанных вопросов^_^