- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Microsoft Entity Framework 和 C# 中的 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:英语不是我的母语,如果您告诉我我的帖子中可能存在的错误,我将不胜感激。
提前致谢
最佳答案
PostSharp 确实可以创建一个名为 k__BackingField 的属性(真实名称有点不同;您看到的是转义名称),因为我想您正在将方面应用于字段,这会导致 PostSharp 封装字段到同名的属性中。因此,您可以拥有一个以该字段命名的属性。
您应该检查是否真的要将方面添加到字段中。也许您只是想将方面添加到属性中,但错误地将其添加到字段中。默认情况下,LocationInterceptionAspects 应用于(多播)字段 和 属性。使用 MulticastAttributeUsageAttribute.AttributeTargets
将其限制为属性。
关于c# - PostSharp 将 k__Backing Field 插入实体类,导致数据库生成失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10570925/
我正在使用 Microsoft Entity Framework 和 C# 中的 CodeFirst 创建一个数据库。我想在 WPF 应用程序中使用数据库,因此实体类应该实现“INotifyPrope
我是一名优秀的程序员,十分优秀!