У меня есть отношения между родителями и детьми, которые я собрал тестовый пример между пользователями и группами.Я сделал это, чтобы воспроизвести ошибку в отношении «Родитель-ребенок» при попытке выполнить каскадную вставку с использованием отношения «s».
Ниже приведены две таблицы SQL:
CREATE TABLE [dbo].[User]
(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [varchar](50) NOT NULL,
)
CREATE TABLE [dbo].[Group]
(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[GroupName] [varchar](50) NOT NULL,
[UserId] [int] NOT NULL,
)
ALTER TABLE [dbo].[Group] WITH CHECK ADD CONSTRAINT [FK_Group_User] FOREIGN KEY([UserId])
REFERENCES [dbo].[User] ([Id])
Объекты представляютэти две таблицы со следующими сопоставлениями:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("[User]");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name).Not.Nullable();
HasMany(x => x.Groups).KeyColumn("UserId").Cascade.SaveUpdate();
}
}
public class GroupMap : ClassMap<Group>
{
public GroupMap()
{
Table("[Group]");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.GroupName).Not.Nullable();
References(x => x.User).Column("UserId").Not.Nullable();
}
}
Код для создания объектов просто:
User u = new User () {Name = "test"};Группа g = новая группа () {GroupName = "Группа тестирования"};u.Groups.Add (g);
using (var session = factory.OpenSession())
{
session.SaveOrUpdate(u);
}
Однако происходит сбой за исключением «Невозможно вставить значение NULL в столбец« UserId », таблица« test.dbo.Group »; столбец не допускает пустых значений.INSERT завершается неудачно. Оператор завершен ".Я подозреваю, что это из-за того, что идентификатор родительского объекта (столбец идентификаторов) передается как NULL, а не новые значения.Это ошибка или есть способ исправить эти отображения так, чтобы это каскадное отношение было успешным?