Проблема вставки составной модели в Fluent NHibernate - PullRequest
0 голосов
/ 15 марта 2012

У меня следующая ситуация:

У меня есть 2 класса (дочерние) и составной класс (родительский):

public Parent
{
   public ChildOne C1 {get;set;}
   public ChildTwo C2 {get;set;}
}

public ChildOne
{
    public int Id{get;set;}
...some primitive fields
}

public ChildTwo
{
    public int Id{get;set;}
...other primitive fields
}

Отображение для этих классов следующее:

public class Parent: ClassMap<Parent>
    {
        public ParentMap()
        {
            Table("Parents");
            Id(x => x.Id).Column("ParentId"); 
            References(x => x.C1).Column("ChildOneId");
            References(x => x.C2).Column("ChildTwoId");
        }
    }

и

public class ChildOne: ClassMap<ChildOne>
    {
        public ChildOneMap()
        {
            Table("ChildOnes");
            Id(x => x.Id).Column("ChildOneId"); 
            ...other Mappings for primitive types
        }
    }

(и то же самое для ChildTwo).

БД выглядит следующим образом:

Parents: ParentId, ChildOneId, ChildTwoId
ChildOne: ChildOneId, ...other columns
ChildOne: ChildTwoId, ...other columns

и отношения ChildOneId(Родители) <==> ChildOneId (ChildOnes).

Когда я хочу вставить новый родительский элемент в Db с соответствующими дочерними элементами, я получаю сообщение об ошибке, что ChildOneId / ChildTwoId не может быть нулевым.

Что мне нужно указать в классе сопоставления, чтобы вставка работала?(Операция получения работает правильно)

Спасибо, Тамаш

1 Ответ

1 голос
/ 16 марта 2012

Полагаю, вы не вызываете save для потомков.

session.Save(new Parent { C1 = new ChildOne(), C2 = new ChildTwo() });

Используйте каскадирование для сохранения потомков от родителя.

References(x => x.C1).Column("ChildOneId").Cascade.All();
References(x => x.C2).Column("ChildTwoId").Cascade.All();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...