#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. Также вызывайте метод сохранения после добавления каждой книги, чтобы автоматически заполнять ее идентификатор из базы данных.