Связь «Один ко многим» не работает в NHibernate

#c# #nhibernate #fluent-nhibernate

#c# #nhibernate #свободно-nhibernate

Вопрос:

Я использую FluentHibernate и автоматическое сопоставление. Мои классы

 public class Student
{
  public Student()
  {
    Books = new List<Book>(); 
  }
  public virtual int Id{get;private set;}
  public virtual string Name{get;set;}
  public virtual IList<Book> Books { get; private set; }
}

public class Book
{
  public  Book (){} 
  public virtual int Id{get;private set;}
  public virtual string Name{get;set;}
}

Now, I create book objects and to a student object, and call save.
Book b = new Book();
b.Name = "test"
Book b1 = new Book();
b2.Name = "test1" 

Student student = new Student();
student.Books.Add(b);
student.Books.Add(b1);
session.saveorupdate(student);
  

Сохраняется только студент, а не книги. Что я делаю не так?

Ответ №1:

Вам нужно добавить Cascade.SaveUpdate() в свой файл автоматического сопоставления. Это должно выглядеть примерно так:

 HasMany(x => x.Books).Cascade.All();
  

Комментарии:

1. да, вы правы. Это то, что я в конечном итоге сделал.

2. Я добавил это, и обновление не выполняется. Он только вставляет дочерние элементы без ссылки и никогда не обновляется.

3. Пожалуйста, создайте новый вопрос, так будет проще помочь вам в этом.

Ответ №2:

Я думаю, что это отношение «многие ко многим», а не «один ко многим» (чтобы назначить больше студентов одному уникальному элементу книги и наоборот). Поэтому вам также нужно добавить public virtual IList<Student> Students { get; set; } в класс Book. Также вызывайте метод сохранения после добавления каждой книги, чтобы автоматически заполнять ее идентификатор из базы данных.