Я сопоставляю набор классов членства для своего приложения, используя Fluent NHibernate. Я сопоставляю классы с базой данных членства asp.net. Схема базы данных, относящаяся к проблеме, выглядит следующим образом:Fluent NHibernate - Как сопоставить недействительный внешний ключ, который существует в двух связанных таблицах
ASPNET_USERS
UserId PK
ApplicationId FK NOT NULL
other user columns ...
ASPNET_MEMBERSHIP
UserId PK,FK
ApplicationID FK NOT NULL
other membership columns...
Между этими двумя таблицами существует взаимно-однозначная взаимосвязь. Я пытаюсь соединить две таблицы вместе и картографические данные из обеих таблиц в единое целое «User», который выглядит следующим образом:
public class User
{
public virtual Guid Id { get; set; }
public virtual Guid ApplicationId { get; set; }
// other properties to be mapped from aspnetuser/membership tables ...
Мой файл отображение следующим образом:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("aspnet_Users");
Id(user => user.Id).Column("UserId").GeneratedBy.GuidComb();
Map(user => user.ApplicationId);
// other user mappings
Join("aspnet_Membership", join => {
join.KeyColumn("UserId");
join.Map(user => user.ApplicationId);
// Map other things from membership to 'User' class
}
}
}
Если Я пытаюсь запустить код выше. Я получаю исключение FluentConfiguration.
Пытался добавить свойство 'ApplicationId', когда уже добавлено.
Если я удалю строку «Карта (user => user.ApplicationId);» или изменить его на «Карта (user => user.ApplicationId) .No.Update(). Not.Insert();« », то приложение запускается, но я получаю следующее исключение при попытке вставить нового пользователя :
Невозможно вставить значение NULL в столбец «ApplicationId», таблицу «ASPNETUsers_Dev.dbo.aspnet_Users»; столбец не допускает нулей. INSERT терпит неудачу. Заявление было прекращено.
И если оставить .map (пользователь => user.ApplicationId) как это первоначально было и сделать одно из этих изменений в присоединиться .map (пользователь => user.ApplicationId) то я получаю одно и то же исключение выше, за исключением того, что исключение связано со вставкой в таблицу aspnet_Membership.
Итак ... как это сделать, если я предполагаю, что я не могу изменить схему базы данных?
Если я понимаю ваши таблицы схем, кажется, у вас есть составной ключ, состоящий из ** и ** userId и ApplicationId. Попробуйте определить составной ключ, а затем выполните сопоставление Join с помощью этого ключа. – Tahbaza