2012-05-13 3 views
5

C#でMicrosoft Entity FrameworkとCodeFirstを使用してデータベースを作成しています。 WPFアプリケーションでデータベースを使用したいので、Entity-Classesは "INotifyPropertyChanged"を実装する必要があります。PostSharpがエンティティクラスにk__Backingフィールドを挿入したため、データベース生成が失敗する

これは、PostSharpのアスペクトを使用すると非常に優雅に行うことができます。これは、プロパティが変更されるたびにPropertyChangedイベントを自動的にトリガします。私は、このような様相を作成して、私のエンティティクラスでそれを使用する場合は、データベースを作成しようとしたとき、私は次のexeptionを得る:

\tSystem.Data.Entity.Edm.EdmNavigationProperty: Name: The specified name is not allowed:   '<Name>k__BackingField'. 

明らかPostSharpは、データベースの作成が失敗する原因となる「k__BackingField」というプロパティを作成しますそれはEntityFrameworkの観点からは無効な名前だからです。すべての単一のEntity-Classで "INotifyPropertyChanged"を手動で実装せずにこのエラーを回避する方法はありますか?

P.S:英語は母国語ではありません。あなたの投稿に間違いがあった場合は、非常に感謝しています。

+0

k__Backingfieldはbij postsharpではなく、自動実装されたプロパティを使用するとc#コンパイラによって生成されます。 – albertjan

+0

これは当てはまりますが、PostSharpを無効にしてもエラーは発生しなくなりました。どういうわけか、エラーとPostSharpの間に関係がなければなりません。 – BoltzmannBrain

+0

自動実装されたプロパティからバッキングフィールド付きのプロパティに切り替えることを試みましたか? – albertjan

答えて

6

それはPostSharpはk__BackingFieldと呼ばれるプロパティを作成することができるというのは本当だが、(本当の名前は少し異なっている、あなたが見ているものは、エスケープ名です)事前にありがとうございます、私はあなたが適用していると仮定しているためアスペクトをフィールドに追加すると、PostSharpはフィールドを同じ名前のプロパティにカプセル化します。したがって、フィールドの名前を付けたプロパティを持つことができます。

フィールドに実際にアスペクトを追加するかどうかを確認する必要があります。おそらく、プロパティにアスペクトを追加したいだけでしたが、間違ってフィールドに追加することになりました。デフォルトでは、LocationInterceptionAspectsはフィールドのプロパティに適用(マルチキャスト)されます。それをプロパティに制限するには、MulticastAttributeUsageAttribute.AttributeTargetsを使用します。

+0

それは実際に私の問題を解決しました。これまでにありがとうございました! – BoltzmannBrain

関連する問題