我使用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...
這兩個表之間存在一對一的關係。我試圖在兩個表一起,地圖數據來自表連接到一個「用戶」的實體,看起來像這樣:
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'時已添加。
如果我刪除了行「Map(user => user.ApplicationId);」或將其更改爲「地圖(用戶=> user.ApplicationId).Not.Update()Not.Insert();」那麼應用程序運行,但我得到下面的異常試圖插入一個新用戶時:
不能將值NULL插入到'ApplicationId'列'ASPNETUsers_Dev.dbo.aspnet_Users'列中;列不允許有空值。 INSERT失敗。 該聲明已被終止。
如果我離開.MAP(用戶=> user.ApplicationId),因爲它原本是和做任何的這些變化對加入 .MAP(用戶=> user.ApplicationId)那麼我會得到上述相同的例外,當然除了例外與插入到aspnet_Membership表中有關
所以...我如何做這種映射假設我不能改變我的數據庫模式?
如果我理解你的模式表,看起來你有一個由** userId和ApplicationId組成的組合鍵。嘗試定義組合鍵,然後使用該鍵進行連接映射。 – Tahbaza 2010-11-15 01:18:54