Я ищу пример операций CRUD для схемы NHibernate "многие к одному". Я нашел только основные примеры, и они мне не помогли. Я пытаюсь вставить новый объект в БД и получить NHibernate.Exceptions.GenericADOException
Код для операции вставки:
public bool CreateBook(Book book)
{
try
{
using (ISession connectionDB = NHibertnateSession.OpenSession())
{
using (ITransaction transaction = connectionDB.BeginTransaction())
{
connectionDB.Save(book);
transaction.Commit();
}
}
return true;
}
catch
{
return false;
}
}
Думаю, мне нужно сделать что-то подобное, чтобы это заработало:
- создать нового автора
- создать новое издательство
- получить идентификатор нового автора и нового издательства
- вставить новую книгу в таблицу, где authorForeignKey = newAuthorId
and publishingForeignKey = newPublishingId
Это странное решение, не так ли?
И какой способ вставки данных в таком случае является лучшим?
Мои классы моделей (Книга, Автор, Издательский дом) здесь
А это мой hbm.xml
файл
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true"
assembly="InFolio_HomeLib" namespace="InFolio_HomeLib.Models">
<class name="Author" table="Author" dynamic-update="true" >
<cache usage="read-write"/>
<id name="Id" column="Id" type="int">
<generator class="native" />
</id>
<property name="FirstName" />
<property name="LastName" />
</class>
<class name="PublishingHouse" table="PublishingHouse" dynamic-update="true">
<cache usage="read-write"/>
<id name="Id" column="Id" type="int">
<generator class="native" />
</id>
<property name="Name" />
<property name="City" />
</class>
<class name="Book" table="Book" dynamic-update="true" >
<cache usage="read-write"/>
<id name="Id" column="Id" type="int">
<generator class="native" />
</id>
<property name="UDK" />
<property name="BBK" />
<property name="AuthorsSign" />
<property name="ISBNrus" />
<property name="ISBNeng" />
<many-to-one name="Author" column="AuthorId" />
<property name="Name" />
<many-to-one name="PublishingHouse" column="PublishingId" />
<property name="Year" />
<property name="Pages" />
<property name="Circulation" />
<property name="IsRead" />
<property name="Rating" />
<property name="Annotation" />
</class>
P.S. Если у вас есть примеры / ссылки на другие операции CRUD, это было бы здорово.