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

本文关键字:数据库 失败 实体 Backing 字段 PostSharp 插入 | 更新日期: 2023-09-27 18:34:04

我正在使用 C# 中的Microsoft实体框架和 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"?

PS:英语不是我的母语,如果您告诉我我的帖子中可能存在的错误,我将不胜感激。

提前谢谢你

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

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

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