マッピングが間違っている可能性がありますが、NHibernate は混乱しているように見えますが、動作する場合はスムーズです。私はこの時点まですべてを Google で調べましたが、まだ NHibernate を学んでいます。Usermap にリンクする userId を持つ AccountUser マップにリンクする accountId を持つ Address をクエリしようとしています。「joe」というユーザー名を持つすべてのアドレスを検索したい。私のクエリでこれを行う方法を知っている人はいますか? 以下は私のマップであり、クエリは次のとおりです。
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'
うまくいけば、それで十分な詳細