1

私のアプリケーションのアーキテクチャは次のように構成されています。

UI (クライアント側)

ユーザー インターフェイス (XAML)

VM (クライアント側)

すべてのビュー モデルのレイヤー。この層は、サービス層からの DTO と連携します。

サービス (サーバー側)

クライアントの通信インターフェース。クライアントは、このサービス層から DTO を消費します。このレイヤーは、DTO から EF エンティティ (およびその逆) への変換を行います。オートマッパーで変換を行います。

ドメイン (サーバー側)

ビジネスロジック全体がいくつかのドメインに分かれています。このレイヤーは、エンティティ フレームワークのエンティティと連携します。

データ アクセス (サーバー側):

データ アクセス層は EF と連携します。このレイヤーは、リポジトリ / 作業単位パターンで設計されています。

私の問題:新しいレコードの作成はうまくいきます。しかし、レコードを更新したい場合、EF は更新について知りません。常に新しいレコードを作成したいと考えています。問題は、EF が変更追跡メカニズム全体の参照を処理することだと思います。オートマッパーは常に新しいレコードを作成します。これは正しいです?

代替手段はありますか?

前もって感謝します。

よろしく、プロ

編集:私の問題の要約:

私の n 層アーキテクチャでは EF は更新されず、常に新しいレコードを作成しようとします。

それが役立つことを願っています。

4

3 に答える 3

1

エンティティの特性に基づいて、ビジネスレイヤーで決定を下す必要があります。エンティティにIDがある場合は、すでに存在している必要があるため、次を使用する必要があります。

context.YourEntities.Attach(entity);
context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);

しかし、そうでない場合は、新しいものであり、使用することができます

context.YourEntities.AddObject(entity);

その後、両方のパスの後、

context.SaveChanges();
于 2012-08-01T09:06:55.377 に答える