5

C# で Microsoft Entity Framework と CodeFirst を使用してデータベースを作成しています。データベースを WPF アプリケーションで使用したいので、エンティティ クラスは「INotifyPropertyChanged」を実装する必要があります。

これは、プロパティが変更されるたびに PropertyChanged イベントを自動的にトリガーする PostSharp アスペクトを使用して非常にエレガントに行うことができます。このようなアスペクトを作成してエンティティ クラスで使用すると、データベースを作成しようとすると、次の例外が発生します。

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

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

PS: 英語は私の母国語ではありません。投稿の間違いについて教えていただければ幸いです。

前もって感謝します

4

1 に答える 1

6

PostSharp が k__BackingField というプロパティを作成できるのは事実です (実際の名前は少し異なります。表示されているのはエスケープ名です)。フィールドにアスペクトを適用していると思われるため、PostSharp はフィールドをプロパティにカプセル化します。同名の。したがって、フィールドにちなんで名付けられたプロパティを持つことができます。

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

于 2012-05-13T11:00:27.847 に答える