У меня есть два вида сущностей, комментарии и задачи. Оба типа могут быть добавлены в закладки пользователем. Итак, я создал таблицу под названием «Закладки»:
CREATE TABLE [dbo].[Bookmarks] (
[ID] [int] IDENTITY(1,1) NOT NULL,
[FKUserID] [int] NOT NULL,
[FKCommentID] [int] NULL,
[FKTaskID] [int] NULL)
Отображение этих отношений для моей сущности User выглядит следующим образом:
var bookmarks = Component(x => x.Bookmarks, x => x.HasManyToMany(b => b.Comments)
.Table("Bookmarks")
.Access.CamelCaseField()
.ParentKeyColumn("FKUserID")
.ChildKeyColumn("FKCommentID")
.AsBag()
.LazyLoad());
bookmarks.HasManyToMany(b => b.Tasks)
.Table("Bookmarks")
.Access.CamelCaseField()
.ParentKeyColumn("FKUserID")
.ChildKeyColumn("FKTaskID")
.AsBag()
.LazyLoad();
Я думаю, что все будет работать хорошо, но не тогда, когда объекты базы данных создаются с нуля из самого NHibernate. Тогда я получаю приятное сообщение об ошибке
NHibernate.Exceptions.GenericADOException: не удалось вставить коллекцию: [Domain.Model.User.Domain.Model.User.Bookmarks.Tasks # 1] [SQL: INSERT INTO закладки (FKUserID, FKTaskID) VALUES (@ p0, @ р1)]
----> System.Data.SqlClient.SqlException: невозможно вставить значение NULL в столбец «FKCommentID», таблица «xyzautomatedtests.dbo.Bookmarks»; столбец не допускает пустых значений. Вставить не удается.
Заявление было прекращено.
Конечно, я мог бы использовать две таблицы вместо этой, но разве нет способа запустить это? К сожалению, я не могу найти способ установить эти два дочерних столбца в конфигурации как обнуляемые.
Есть подсказки?