2013-10-03 73 views
0

我可能會有可能映射錯誤,或者什麼,NHibernate似乎讓我感到困惑,但是當它工作時它很流暢。我已經谷歌的一切,我仍然在學習NHibernate。我正在嘗試查詢具有accountId的地址,該地址鏈接到我的AccountUser地圖,該地圖具有可鏈接到我的用戶地圖的userId。我想用「joe」的用戶名查找所有的地址。任何人都知道我會如何處理我的查詢?下面是我的地圖,以及查詢:C#NHibernate加入問題

public AddressMap() 
{ 
     Table("Address"); 
     Id(x => x.Id).GeneratedBy.Native(); 
     Map(x => x.FirstName); 
     Map(x => x.MiddleName); 
     Map(x => x.LastName); 
     Map(x => x.CompanyName); 
     Map(x => x.Street); 
     Map(x => x.City); 
     Map(x => x.State); 
     Map(x => x.AccountID); 
     Map(x => x.Name); 
     References(x => x.AccountUser); 
} 

public class AccountUserMap: ClassMap<AccountUser> 
{ 
    public AccountUserMap() 
    { 
     Table("AccountUser"); 
     Id(x => x.Id).GeneratedBy.Native(); 
     Map(x => x.UserId); 
     Map(x => x.AccountID).Not.Nullable(); 
     References(x => x.User); 
    } 
} 

public UserMap() 
{ 
     Table("User"); 
     Id(x => x.Id).GeneratedBy.Native(); 
     Map(x => x.Name); 
} 

// non working query: 
Address address = null; 
User user = null; 
AccountUser accountUser = null; 
var query = session.QueryOver<Address>(() => address) 
       .JoinQueryOver(x => x.AccountUser,() => accountUser) 
       .Where(() => accountUser.AccountID == address.AccountID) 
       .JoinQueryOver(y => y.User,() => user) 
       .Where(() => user.Id == accountUser.UserId) 
       .And(() => user.Name == "joe") 
       .List()).ToList(); 

錯誤消息是不是非常有幫助要麼...

{「無效的列名稱AccountUser_id'\ r \ n無效的列名 」。 USER_ID」 \ r \ n無效的列名 'AccountUser_id'。\ r \ n無效列 名 'USER_ID'。「}

有什麼用下劃線命名,所以它必須有一些與NHibernate

此外,下面的作品該SQL查詢,而這也正是我想做的事:

SELECT TOP 1000 
    [AddressID] 
    ,[FirstName] 
    ,[MiddleName] 
    ,[LastName] 
    FROM Address 
    inner join AccountUser accountUser 
    on AccountUser.AccountID = Address.AccountID 
    inner join User user 
    on user.UserID = accountUser.UserID 
    where user.Name= 'joe' 

希望這就是足夠的細節

回答

0

如果屬性名稱不匹配,你必須在指定他們的數據庫名稱映射,例如:

Id(x => x.Id, "AddressID").GeneratedBy.Native(); 

或Fluent NHibernate將使用其默認的命名約定的關鍵列。