У меня есть следующие объекты
![alt text](https://i.stack.imgur.com/J8R8o.png-)
, и я пытаюсь отобразить их с помощью FluentNHibernate.
Некоторые примечания об объектах:
- Атрибуты
CreatedBy
и AssignedTo
в сущности Task
имеют тип Person и на стороне базы данных являются столбцами типа int, которые называются соответственно CreatorID
и AssigneeID
- Атрибут
WrittenBy
в сущности Note
имеет тип Person и сохраняется в базе данных в столбце с именем AuthorID
Я не собираюсь включать все сопоставления здесь, как естьможет быть, не нужно, но самая большая проблема, с которой я столкнулся, возникла, когда я добавил Задачу и отображение заметки.
Теперь фактически, если я пытаюсь добавить Адрес к объекту Person, NHibernate пытается выполнитьследующий запрос
UPDATE Addresses SET AuthorID = @p0 WHERE AddressID = @p1;
Где я не так с этим?
РЕДАКТИРОВАТЬ : добавлено отображение сущностей
public PersonMap() {
Table( "Persons" );
Id( c => c.PersonID ).Column( "PersonID" ).GeneratedBy.Identity();
References( c => c.Company ).Column( "CompanyID" );
HasMany( c => c.Addresses ).Cascade.SaveUpdate();
HasMany( c => c.TasksAsCreator ).Cascade.SaveUpdate();
HasMany( c => c.TasksAsAssignee ).Cascade.SaveUpdate();
HasMany( c => c.NotesAsAuthor ).Cascade.SaveUpdate();
}
public TaskMap() {
Table( "Tasks" );
Id( i => i.TaskID ).Column( "TaskID" ).GeneratedBy.Identity();
References( i => i.Company ).Column( "CompanyID" );
References( i => i.CreatedBy ).Column( "CreatorID" );
References( i => i.AssignedTo ).Column( "AssigneeID" );
HasMany( i => i.Notes ).Cascade.SaveUpdate();
}
public NoteMap() {
Table( "Notes" );
Id( n => n.NoteID ).Column( "NoteID" ).GeneratedBy.Identity();
References( n => n.Task ).Column( "TaskID" );
References( n => n.WrittenBy ).Column( "AuthorID" );
}
РЕДАКТИРОВАТЬ 2 : после экспорта сопоставления (спасибо dotjoe) я нашел много странныхрезультат, следующий за
<bag cascade="save-update" name="NotesAsAuthor" mutable="true">
<key>
<column name="CreatorID" />
</key>
<one-to-many class="Note, GSLConverter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
Это совершенно неверно! И не отражает отображение, показанное выше ....