質問

WCFサービスから関連データを取得し、Windows Formsアプリケーション内で更新してから、更新されたデータをWCF経由でデータベースに保持するn層ソリューションを作成しました。アプリケーション、WCFサービス、およびデータベースはすべて異なるマシン上にあります。

取得されるデータは、オブジェクトと子オブジェクトで構成されます...

public Product Select(string catalogueNumber) {

  return (from p in this.ProductEntities.Products.Include(@"Tracks")
            where p.vcCatalogueNumber == catalogueNumber
            select p).FirstOrDefault() ?? new Product();
}

クライアントアプリケーションによって適用される更新は、既存のコンテンツを更新するだけでなく、追加の「トラック」を挿入することもできます。オブジェクト。

クライアントアプリケーションからProductオブジェクトを受け取ると、すべての更新を正しく見ることができますが、すべての変更を正しく保存するには、いくつかのフープをジャンプする必要があります...

public void Save(Product product) {

    Product original = this.Select(product.vcCatalogueNumber);
    if (original.EntityKey != null) {

        this.ProductEntities.ApplyPropertyChanges(product.EntityKey.EntitySetName, product);

        // There must be a better way to sort out the child objects...
        foreach (Track track in product.Tracks.ToList()) {

            if (track.EntityKey == null) {
                original.Tracks.Add(track);
            }
            else {
                this.ProductEntities.ApplyPropertyChanges(track.EntityKey.EntitySetName, track);
            }

        }

    }
    else {

        this.ProductEntities.AddToProducts(product);

    }

    this.ProductEntities.SaveChanges();

}

確かに、これを行うにはもっと簡単な方法が必要ですか?

注:午後の大半をEntityBagプロジェクトの調査に費やしましたが、EF RTMで動作するように更新されていないことがわかりました。特に、既存のデータは正常に更新されますが、新しいオブジェクトを混在させると例外がスローされます。

役に立ちましたか?

解決

特定のシナリオに対する既成の答えはありません-ただ質問:ADO.NET Data Services(f.k.a." Astoria")をチェックアウトしましたか?

これらは、WCFのRESTfulインターフェイスであるEntity Frameworkの上に構築されており、クライアント側のエクスペリエンスを提供します。さらに、クエリだけでなく、データベースへのレコードの挿入についてもまともなストーリーを持っているようです。

これはオプションですか?

MSDN David Haydenのブログ Channel9 、または一部の優れた MIX08およびMIX 09

のセッション

マーク

他のヒント

おそらく、Danny SimmonsのEntityBagサンプルをご覧ください。

これらの種類の問題を簡素化するように設計されています。 http://code.msdn.microsoft.com/entitybag/

CatZによると、.NET 4.0の方がはるかに簡単だという。

私たちが支援することを計画していることの1つは、自己追跡可能なクラスを生成するT4テンプレートを作成することと、これらの自己追跡エンティティがApplyChangesを簡単にするための追加の表面です()サーバー層に戻ったときにコンテキストに。

これが役立つことを願って

乾杯 アレックス(マイクロソフトのEntity FrameworkチームのPM)。

このスレッドは静かであることがわかりましたので、少し更新することができます...

Weeeeee! EF 4にセルフトラッキングエンティティが到着しました!

これを確認してください:

http://blogs.msdn.com/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx
エンティティフレームワークチームによる自己追跡メカニズムの説明。

http:// aleembawany。 com / 2009/05/17 / new-features-in-entity-framework-40-v2 /
EF 4の新機能の発表

http://msdn.microsoft.com/en-us/magazine /ee321569.aspx
切断されたエンティティのいくつかのN層パターンの比較。

お楽しみください!

Entity Framewrok 4では、メソッド「ApplyCurrentValues」を使用できます。切り離されたエンティティを更新します。

シナリオでは次のようになります。

this.ProductEntities.Product.ApplyCurrentValues(product);
foreach (Track track in product.Tracks.ToList()) {
if (track.EntityKey != null)
{
//Update Entity
  this.ProductEntities.Track.ApplyCurrentValues(track);
}
else
{   
  //New Entity
  this.ProductEntities.Track.Attach(track);
}

}

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

Entity Framework v1.0の制限の1つは、エンティティの更新です。残念ながら、バージョン2が登場するまでは運が悪いと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top