【发布时间】:2017-09-04 14:25:16
【问题描述】:
我正在 Visual Studio 2012 中处理 MVC 4 (C#) 项目。我正在使用实体框架,它利用 *.edmx 文件对现有数据库进行建模。我的目标是实施数据库审计以跟踪对数据库所做的任何更改。类是使用数据库表中的字段自动生成的——我相信这是非常标准的东西。
我在尝试检索这些生成的类的主键时遇到了问题。实体框架不会将 [Key] 属性分配给类属性。我试图通过扩展创建的部分类并自己分配这个属性来解决这个问题。将其直接添加到生成的类中可以正常工作。如果我尝试“伙伴类”方法,稍后在执行代码时会收到以下错误:“实体 {Class Name} 没有 [Key] 属性。”
自动生成的类:
public partial class List
{
public List()
{
this.Tasks = new HashSet<Task>();
}
public int Id { get; set; }
public string ListName { get; set; }
}
扩展(好友)类:
[MetadataType(typeof(ListMetaData))]
public partial class List
{
private class ListMetaData
{
[Key]
public int Id { get; set; }
}
}
代码sn-p:
var property = dbEntry.Entity.GetType().GetProperties().FirstOrDefault(
p => p.GetCustomAttributes(typeof(KeyAttribute), true).Any());
if (property == null)
throw new InvalidOperationException(string.Format(
"Entity {0} has no [Key] attribute.", dbEntry.Entity.GetType().Name));
string keyName = property.Name;
我正在重写 DbContext 中的 SaveChanges() 方法来跟踪所做的更改。上面的 sn-p 显示了一个函数的一部分代码,该函数检查 DbEntityEntry 对象 (dbEntry) 以获取主键。
【问题讨论】:
标签: c# entity-framework asp.net-mvc-4