Я сопоставляю набор классов членства для моего приложения, используя 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);" или изменить ее на "Карта (user => user.ApplicationId) .Not.Update () .Not.Insert ();", затем приложение запускается, но я получаю следующее исключение при попытке вставить нового пользователя:
Невозможно вставить значение NULL в столбец «ApplicationId», таблица «ASPNETUsers_Dev.dbo.aspnet_Users»; столбец не допускает пустых значений. Вставить не удается.
Заявление было прекращено.
И если я оставлю .Map (user => user.ApplicationId) , как это было изначально, и внесу любое из этих изменений в join .Map (user => user.ApplicationId) тогда я получаю то же исключение выше, за исключением того, что, конечно, исключение связано со вставкой в таблицу aspnet_Membership
Итак ... как мне сделать такое отображение при условии, что я не могу изменить схему базы данных?