У меня отношения один-к-одному между классом Person и Employee. Я ожидаю, что ВСТАВКА будет каскадом от Человека к Сотруднику. Однако этого не происходит. Я пробовал cascade = 'all' и cascade = 'save-update' для элемента отношения один-к-одному, но это не сработало.
Структуры моих объектов следующие:
public class Person
{
public virtual Employee Employee { get; set; }
public virtual int Age { get; set; }
public virtual string Forename { get; set; }
public virtual string Surname { get; set; }
public virtual int PersonID { get; set; }
}
public class Employee
{
public virtual int PersonID { get; set; }
public virtual string PayRollNo { get; set; }
public virtual int Holidays { get; set; }
public virtual Person Person { get; set; }
}
Отображение файлов показано ниже:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Employee, Employee.DAL" table="`Employee`" >
<id name="PersonID" column="`PersonId`" type="int">
<generator class="native" />
</id>
<property type="string" length="30" name="PayRollNo" column="`PayRollNo`" />
<property type="int" name="Holidays" column="`Holidays`" />
<one-to-one name="Person" class="Person" cascade="all"/>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Person, Employee.DAL" table="`Person`" >
<id name="PersonID" column="`PersonId`">
<generator class="foreign">
<param name="property" >Employee</param>
</generator>
</id>
<property type="string" name="Forename" column="`Forename`" />
<property type="string" name="Surname" column="`Surname`" />
<property type="int" name="Age" column="`Age`" />
<one-to-one name="Employee" class="Employee" constrained="true" />
</class>
</hibernate-mapping>
Код для инициации объектов и их сохранения:
var employee = new Employee();
employee.Person = new Person { Employee = employee };
ISessionFactory sessionFactory = (new Configuration()).Configure().BuildSessionFactory();
employee.Person.Age = 27;
employee.Person.Forename = "N";
employee.Person.Surname = "M";
employee.PayRollNo = "12";
employee.Holidays = 27;
using (var session = sessionFactory.OpenSession())
{
session.Save(employee);
}