現在、オブジェクトモデルと永続化レイヤがEntity Frameworkモデルデザイナを使用して構築されているアプリケーションを開発中です。エンティティにカスタムのマップされていないプロパティを実装する
私が持っている要件の1つは、自分が「汚い」状態(変更された状態)にあるとき、状況の変化が起こったとき、そして最も重要なことは切断された状態で働くときモード。そこで、IsDirty
ブールプロパティを追加するためにT4テンプレートを修正し、IsDirty
が変更されたときに発生するイベントを追加し、すべてのスカラープロパティのxxxChangedメソッドにthis.IsDirty = true
を追加しました。エンティティは、そのコンテキストに取り付けたが、取り付けたときに、プロパティが変更されるたびに、これfalse
へIsDirty
値を変更していないとき
すべてが素晴らしい作品、私はこの例外を受け取る:
プロパティ「を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);
}
}
http://stackoverflow.com/questions/3595404/how-not-persist-property-ef4-code-firstの重複している可能性があります。[NotMapped]を試してください。 –
NotMappedはコードファーストでのみ動作します。私はここでEDMデザイナーのモデルファーストを使用しています。 – Ucodia
あなたがT4を修正して、それが動作するはずの生成されたエンティティ(明らかにEF4.1 +)にアクセスできれば、それを実行することができます。そうでなければ、モデルビューから削除することで無視します。 –