EF STEをしばらく使用していましたが、アプリケーションがかなり成長しており、新しい4.1 DbContextを訴えて、別のビジネスレイヤを「進化させる」ことができました。私たちのデータ層は異なるタイプを使用する必要はありません。EF 4.1 DBContextとナビゲーションプロパティ
DbContextのやり方についての基本評価では、少し問題に直面しています。
私は照会するために使用していますし、プリロードは次のように関連するデータを必要と:
return context.Orders.Include("Detail").SingleOrDefault(ord => ord.ID == ID);
そして修正するためのUIに返されたオブジェクトを送信し、UIから返されたときに、データベースへの変更を保存します。私はDbContextで「保存変更」をやって、これまでに読んだものから、
は簡単にこのようなコードを使用して行われます:
context.Entry(order).State = EntityState.Modified;
このコードの問題は、それが実際にオブジェクトとしてのすべてのプロパティをマークしていることです私のモデル(ビジネスルール)のいくつかのプロパティで許可されていないもの。
私は(比較的小規模な要件のための多くのコードを必要とするように思われるところで、変更なしに変更、プロパティの状態を変更すると、サポートされていません!)、次のソリューションに頼っ:
context.Orders.Attach(order);
DbEntityEntry<Order> ordEntity = context.Entry(order);
string[] arr =
{
ordEntity.Property(ord => ord.ID).Name,
ordEntity.Property(ord => ord.ClientID).Name,
};
foreach (string prop in ordEntity.OriginalValues.PropertyNames)
{
if (!arr.Contains(prop))
{
ordEntity.Property(prop).IsModified = true;
}
}
context.SaveChanges();
私は問題をこのコードでは、「Attach」ステートメントは、何も変更が加えられていない場合でも、添付オブジェクトのナビゲーションプロパティに何らかの矛盾があるとの例外をスローしています。 (データベースから取得したオブジェクトを正確に保存します)。 エラーメッセージは次のようなものです: "'OrdersDatamodel.FK_Order_Detail'という関係の 'Detail'ロールに対する矛盾した変更が検出されました。
質問は以下のとおりです。
- は、特定のオブジェクトのプロパティの変更を防止するため、より「エレガント」な方法はありますか?
- コンテキストにオブジェクトを接続するときに発生した例外について、誰が何を知っていますか?
ありがとうございます。私はDbContextで「保存変更」をやって、これまでに読んだものから、
誰でも助けてください! – wassim