2012-06-05 6 views
5

Visual Studio 2012 RCとEntity Framework 5で再生を開始しました...絶対に気に入っていますが、クリーナーがあるかどうか疑問に思っています。原則としてエンティティフレームワーク5とXElementフィールド

私は.ToStringを経由して、それをXMLたびに解析して、設定の中の男をカットしたい

()

public class MyEFEntity 
{ 
    [NotMapped()] 
    public XElement Tags { 
     get { return XElement.Parse(tags); } 
     set { tags = value.ToString(); } } 

    [Column("Tags", TypeName = "xml"), Required] 
    public string tags { get; set; } 
} 

答えて

5

は良い方法はありません。 2つのプロパティーが必要です.1つはXElement、もう1つは永続化された文字列をバッキングするためのものです。解析と変換の量を減らすには、そのためのインフラストラクチャを実装する必要があります。一般的なアプローチは次のようになります。

  • ObjectContext.ObjectMaterializedイベントを処理します - マテリアライズド・オブジェクトがMyEFEntity解析文字列である場合とXElementプロパティに保存します。 DbContextを使用している場合でも、IObjectContextAdapterを明示的に実装してObjectContextを取得できます。
  • オーバーライドSaveChanges -
+2

感謝をDbContext.ChangeTracker.GetEntriesMyEFEntityのすべての変更または挿入されたインスタンスを検索し、文字列プロパティにそのXMLを保存する方法には、これは動作します。私はちょうどそれを行うよりエレガントな方法があることを望んでいた。私は属性とカスタム 'DbContext'を使ってこれをもっときれいにする方法を調べるかもしれません。 MSだけがオープンソースのEFである場合。 :) – Brendan

関連する問題