0

マッピングが間違っている可能性がありますが、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'

うまくいけば、それで十分な詳細

4

1 に答える 1

0

プロパティ名がデータベース名と一致しない場合は、マッピングで指定する必要があります。次に例を示します。

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

または、Fluent NHibernate は、キー列にデフォルトの命名規則を使用します。

于 2013-10-03T20:51:41.127 に答える