2012-03-06 4 views
1

現在、オブジェクトモデルと永続化レイヤがEntity Frameworkモデルデザイナを使用して構築されているアプリケーションを開発中です。エンティティにカスタムのマップされていないプロパティを実装する

私が持っている要件の1つは、自分が「汚い」状態(変更された状態)にあるとき、状況の変化が起こったとき、そして最も重要なことは切断された状態で働くときモード。そこで、IsDirtyブールプロパティを追加するためにT4テンプレートを修正し、IsDirtyが変更されたときに発生するイベントを追加し、すべてのスカラープロパティのxxxChangedメソッドにthis.IsDirty = trueを追加しました。エンティティは、そのコンテキストに取り付けたが、取り付けたときに、プロパティが変更されるたびに、これfalseIsDirty値を変更していないとき

すべてが素晴らしい作品、私はこの例外を受け取る:

プロパティ「をIsDirty」エンティティオブジェクト に有効なエンティティマッピングがありません。詳細については、Entity Framework のドキュメントを参照してください。

ここで何が間違っていますか?オブジェクトが「生きている」ときだけ重要なオブジェクトステータスなので、このプロパティをデータベースにマップしたくありません。 IsDirtyプロパティを飾るために使用する属性はありますか?または、EntityObjectを派生し、ステータスメカニズムを実装する必要がありますか?または、これを実装する方法について、より良いアドバイスがありますか?

ありがとうございました。


編集:EDMデザイナでEntity Framework 4.0を使用しています。ここで

は、すべての基本エンティティに生成されたコードの一部です:

private bool isDirty; 
public event EventHandler DirtyStatusChanged; 

public bool IsDirty 
{ 
    get 
    { 
     return this.isDirty; 
    } 

    internal set 
    { 
     if (this.isDirty != value) 
     { 
      ReportPropertyChanging("IsDirty"); 
      this.isDirty = value; 
      ReportPropertyChanged("IsDirty"); 
      ReportDirtyStatusChanged(); 
     } 
    } 
} 

protected void ReportDirtyStatusChanged() 
{ 
    var handler = this.DirtyStatusChanged; 

    if(handler != null) 
    { 
     handler(this, EventArgs.Empty); 
    } 
} 
+0

http://stackoverflow.com/questions/3595404/how-not-persist-property-ef4-code-firstの重複している可能性があります。[NotMapped]を試してください。 –

+0

NotMappedはコードファーストでのみ動作します。私はここでEDMデザイナーのモデルファーストを使用しています。 – Ucodia

+0

あなたがT4を修正して、それが動作するはずの生成されたエンティティ(明らかにEF4.1 +)にアクセスできれば、それを実行することができます。そうでなければ、モデルビューから削除することで無視します。 –

答えて

1

私は最終的にエラーを自分自身を発見しました。問題は私の不動産セッターの中に嘘をついた。 ReportPropertyChanged/ingと呼ぶのではなく、私はOnPropertyChanged/ingと呼ぶべきだった。

ReportPropertyChanged/ingは、コンテキストが元のエンティティ値と現在のエンティティ値の間の変更を検索することを意味しますが、このプロパティはストアへのマッピングを持たないステータスオブジェクトに過ぎないため、元の値の概念は意味をなさないため、コンテキストがこのプロパティの正しいマッピングを見つけることができませんでした。

OnPropertyChanged/ingを使用して固定しました。

関連する問題