Свободная проблема NHibernate & Migrator с операциями CRUD - PullRequest
0 голосов
/ 18 сентября 2018

У меня проблема с операциями CRUD в трех классах

Мои классы:

public class A 
{
 public virtual int Id { gry; set;} 
 public virtual string Text { gry; set;} 
 public virtual IList<B> Bs { gry; set;} 
}    

public class B 
{
 public virtual int Id { gry; set;} 
 public virtual string Text { gry; set;} 
 public virtual A A { get; set; }
 public virtual C C { gry; set; } 
}    

И

public class C
{
 public virtual int Id { gry; set; } 
 public virtual string Something { gry; set; } 
}  

Я использую Fluent NHibernate и Fluent Migrator.

У меня проблема с правильной настройкой этих инструментов.Когда я хочу сохранить новый объект в базе данных, я должен выполнить операции Save в соответствующем порядке - сначала над объектами C, затем поместить их в объекты класса B и только затем добавить созданные элементы в список переменных в классеА и я их сохраняю.

Я просто хотел бы сохранить объект класса А в базе данных и на игровом автомате его детей.У меня тоже такая же проблема при удалении из базы.Я создал свой собственный класс HasManyConvention с каскадом AllDeleteOrphan, и это не помогло.Я добавил к патчу создание таблицы B в базе данных в Fluent Migrator с Rule.Cascade на FK, и в случае непосредственного удаления объектов класса A, B также удаляются из базы данных, но C уже оставлены.

1 Ответ

0 голосов
/ 27 сентября 2018

Свойства навигации не однозначно описывают отношения между объектами.Я думаю, что даже невозможно сохранить C, основываясь на текущих свойствах навигации, которые нельзя использовать для определения беглого отображения.Вы можете добавить свойство B в классе C и затем попробовать следующее:

Я предполагаю, что у вас есть OneToMany между A и B (много B указывают на один A), а OneToOne между B и C (один указывает Cк одному B).

Отображение 'A':

  HasMany(x => x.Bs).Inverse().Cascade.AllDeleteOrphan();

Отображение 'B':

  References(x => x.A);
  HasOne(x => x.C).Cascade().All();

Отображение 'C':

    //nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...