PostSharp将k__Backing字段插入实体类,导致数据库生成失败

时间:2012-05-13 10:12:15

标签: c# entity-framework code-first postsharp

我正在使用C#中的Microsoft Entity Framework和CodeFirst创建数据库。我想在WPF应用程序中使用数据库,因此实体类应该实现“INotifyPropertyChanged”。

使用PostSharp方面可以非常优雅地完成此操作,每次属性更改时都会自动触发PropertyChanged事件。如果我创建这样的方面并在我的实体类上使用它,我在尝试创建数据库时会得到以下例外:

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

显然,PostSharp会创建一个名为“k__BackingField”的属性,导致数据库创建失败,因为从EntityFramework的角度来看,它是一个无效的名称。如果不在每个实体类中手动实现“INotifyPropertyChanged”,有没有办法绕过这个错误?

P.S:英语不是我的母语,如果你告诉我发帖中可能出现的错误,我将非常感激。

提前谢谢

1 个答案:

答案 0 :(得分:6)

PostSharp确实可以创建一个名为k__BackingField的属性(真实名称有点不同;你看到的是转义名称),因为我认为你将这个方面应用于字段,这会导致PostSharp封装字段到同名的属性。因此,您可以拥有一个以该字段命名的属性。

您应该检查是否确实要将该方面添加到该字段中。也许你只想将方面添加到属性中,但是错误地将它添加到字段中。默认情况下,LocationInterceptionAspects应用(多播)字段属性。使用MulticastAttributeUsageAttribute.AttributeTargets将其限制为属性。