まず、私は、次の表を持っている:流暢NHibernateは複合キーで保存エンティティ
public class CustomerHub
{
public int CustomerId {get;set;}
public int HubId {get;set}
//GetHashCode, Equals, Etc...
}
このマッピング使用:
を、私はこのエンティティにマッピングされているCREATE TABLE CustomerHub (
CustomerId INT NOT NULL,
HubId INT NOT NULL
)
public class CustomerHubMap : ClassMap<CustomerHub>
{
UseCompositeId()
.WithKeyProperty(x => x.CustomerId)
.WithKeyProperty(x => x.HubId);
}
問題は、CustomerHub型の新しいエンティティを作成して保存しようとすると、何も保持されないということですデータベースに転送します。私はすべてをうまく取り出すことができます。ただ保存しないでください。例:
//this will work
var x = session.CreateCriteria(typeof(CustomerHub));
//this will not
using (var trans = session.BeginTransaction())
{
var custHub = new CustomerHub {CustomerId = 293, HubId = 1193};
var y = session.SaveOrUpdate(custHub);
trans.Commit();
}
例外は例外ではなく、単に何もしないことです。私はNH Profiler(優れたツール!)を起動し、データベースにどのようなタイプの挿入コマンドも発行していないようです。
思考?
注:このテーブルは、技術的には結合テーブルとよく似ていて、顧客などの別のエンティティでManyToMany関係になるのが最善だと思います...しかし、 (つまり、ハブ・テーブルがない場合)、結合テーブルをエンティティにマップしてそのように操作するのがさらに簡単です。
素早い回答ありがとうございます。簡潔にするために私はそれを残しましたが、私の呼び出しはすべて、2番目の例に非常に似た包み込まれたコードになっています。私も運がないとフラッシュを試みた。 – jckeyes
が追加されました。私はSaveOrUpdateのことについて確信が持てませんでしたので、これがうまくいくかどうかを待っていました:p – anonymous
最近SaveOrUpdateがどのように機能するかについてのセクションを読んでいました。おそらく彼らは試していないのかもしれません。 – anonymous