Обновление один-ко-многим с помощью Fluent NHibernate - PullRequest
1 голос
/ 09 мая 2009

Я пытаюсь создать модифицированную систему ролей, которая имеет следующую структуру классов / отношений:

Проект ProjectRole Сотрудник

где

ProjectEmployee сопоставляет три объекта вместе.

У меня есть сопоставление «один ко многим» из Project в ProjectEmployee и сопоставление ссылок из ProjectEmployee в Project.

Я могу добавить новый ProjectEmployee просто отлично (что означает, что мои действия по созданию тоже хороши), но я хочу ограничить отношения, чтобы иметь только одну запись на сотрудника. Это влияет на логику моих обновлений.

При совместном взломе я пытаюсь очистить Project.ProjectEmployees (установив значение в новый список), а затем добавляю новый экземпляр ProjectEmployee с соответствующей ролью и т. Д.

При этом я получаю сообщение об ошибке, связанное с установкой Project.ProjectEmployees в пустой список.

"Невозможно вставить значение NULL в столбец 'ProjectId', таблица 'AppDB.dbo.ProjectEmployees'; столбец не допускает нулевые значения. UPDATE не выполняется. Заявление было прекращено. "

Если я удаляю строку, в которой сообщается о новостях в Списке, добавляются последующие записи, но затем я смотрю на слишком много записей на сотрудника.

Вот мой проект -> Отображение ProjectEmployees:

mapping.HasMany<ProjectEmployee>(x => x.ProjectEmployees)    
    .Cascade.All()
    .WithKeyColumn("ProjectId");

И отображение в ProjectEmployee -> Project:

mapping.References(x => x.Project, "ProjectId");

Должно быть просто так?

Для чего бы то ни было, я также добавил в свой класс Project метод AddProjectEmployee, который ищет нужного сотрудника, удаляет его ProjectEmployee, если он существует, затем добавляет новый ProjectEmployee. Я получаю ту же ошибку при вызове этого.

Буду признателен за любую помощь.

Ник

1 Ответ

1 голос
/ 10 мая 2009

Это было кросс-пост в группе Fluent NHibernate и на него ответил Хадсон Акридж. Как сказал Хадсон, решение состоит в том, чтобы использовать Clear() в коллекции, поскольку это позволяет NHibernate отслеживать изменения (тогда как при обновлении коллекции свойство ссылается на экземпляр, о котором NH не знает).

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