ベスト プラクティスと思われるように、外部キー ID を非表示にするように NHibernate モデルを構築したので、リレーションシップとキーの両方を次のようにモデル化する代わりに、次のようにします。
public class CompanyOffice
{
public virtual int Id { get; set; }
public virtual int CompanyId { get; set; }
public virtual Company Company { get; set; }
}
私は単に持っています:
public class CompanyOffice
{
public virtual int Id { get; set; }
public virtual Company Company { get; set; }
}
あとは NHibernate に任せましょう。私はこれが好きですが、設定が必要な複数の外部キーを持ついくつかのテーブルがあり、MVC アクションで新しいエンティティを作成するときに、これを行う必要があります。
public ActionResult CreateNewThing(int stuffId, int whatId, int blahId)
{
var stuff = _service.GetStuffById(stuffId);
var what = _service.GetWhatById(whatId);
var blah = _service.GetBlahById(blahId);
var thing = new Thing { Stuff = stuff, What = what, Blah = blah };
}
これは、エンティティを取得するためにデータベースに 3 回アクセスする必要があることを意味しますが、ID は既に取得済みであり、実行できたはずなのでエンティティは必要ありません。
var thing = new Thing { StuffId = stuffId, WhatId = whatId, BlahId = blahId };
エンティティのデータベースにアクセスせずに、私がやろうとしていることを達成する別の方法はありますか?
弾丸を噛んで、外部キーと関係をマップするだけですか?
それとも、データベースのトリップについて心配しているのでしょうか?