Свободная проблема отображения nHibernate - PullRequest
2 голосов
/ 06 июня 2011

У меня есть эти таблицы / классы (пример):

table FirstTable (
    Id INTEGER NOT NULL DEFAULT AUTOINCREMENT, 
    Name VARCHAR(100) NOT NULL,
    Document VARCHAR(20) NOT NULL
)

table SecondTable (
    Id INTEGER NOT NULL,
    Something VARCHAR(100) NULL,
    FOREIGN KEY (Id) REFERENCES FirstTable (Id)
)

public class FirstClass {
    public string Name { get; set; }
    public string Document { get; set; }
    public SecondClass SecondClass { get; set; }
}

public class SecondClass {
    public string Something { get; set; }
    public FirstClass FirstClass { get; set; }
}

Отображение:

public class FirstClassMap : ClassMap<FirtsClass> {
    Table("FirstTable");
    Id(x => x.Id).GeneratedBy.Identity();
    Map(x => x.Name);
    Map(x => x.Document);
    References(x => x.SecondClass, "Id").ForeignKey();
}

public class SecondClassMap : ClassMap<SecondClass> {
    Table("SecondTable");
    Id(x => x.Id).GeneratedBy.Foreign("FirstClass");
    Max(x => x.Something);
    HasOne(x => x.FirstClass).PropertyRef(x => x.SecondClass).Cascade.SaveUpdate();
}

FirstClass может иметь (0,1) SecondClass, а SecondClass может иметь (1,1) FirstClass.

Нижеследующий код возвращает ошибку "Попытка присвоить идентификатор из нулевого свойства" один к одному ": SecondClass"

var test = new SecondClass();
test.FirstClass = new FirstClass();

test.Something = "New test";
test.FirstClass.Name = "My name";
test.FirstClass.Document = "My document";
// ... commands to save.

1 Ответ

2 голосов
/ 07 июня 2011

Кажется, что NH пытается сначала сохранить SecondClass и не может получить сгенерированный идентификатор из еще не сохраненного FirstClass.

Попробуйте переместить .Cascade.SaveUpdate() в объявление References в FirstClassMapи вызовите команду сохранения в FirstClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...