Я сопоставляю набор классов членства для своего приложения, используя Fluent NHibernate. Я сопоставляю классы с базой данных членства asp.net. Схема базы данных, относящаяся к проблеме, выглядит следующим образом:
ASPNET_USERS
UserId PK
ApplicationId FK NOT NULL
other user columns ...
ASPNET_MEMBERSHIP
UserId PK,FK
ApplicationID FK NOT NULL
other membership columns...
Между этими двумя таблицами существует одна-единственная связь. Я пытаюсь объединить две таблицы вместе и отобразить данные из обеих таблиц в единый объект "Пользователь", который выглядит следующим образом:
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);" или изменить его на "Map (user = > user.ApplicationId) .Not.Update(). Not.Insert();", тогда приложение запускается, но я получаю следующее исключение при попытке вставить новый пользователь:
Невозможно вставить значение NULL в столбец "ApplicationId", таблицу "ASPNETUsers_Dev.dbo.aspnet_Users"; столбец не допускает нулей. INSERT терпит неудачу. Заявление завершено.
И если я оставил .Map(user = > user.ApplicationId), как он был первоначально, и внесет любой из этих изменений в join.Map(user = > user.ApplicationId), тогда я получить одно и то же исключение, кроме, конечно, исключение связано со вставкой в таблицу aspnet_Membership
Итак... как это сделать, если я не могу изменить схему базы данных?