c# - 将 [Key] 属性分配给 Entity Framework 生成的类 - MVC4 C#

标签 c# entity-framework asp.net-mvc-4

我正在 Visual Studio 2012 中开发一个 MVC 4 (C#) 项目。我正在使用 Entity Framework ,该框架利用 *.edmx 文件对现有数据库进行建模。我的目标是实现数据库审计以跟踪对数据库所做的任何更改。类是使用数据库表中的字段自动生成的 - 我相信这是相当标准的东西。

我在尝试检索这些生成的类的主键时遇到了问题。 Entity Framework 不会将 [Key] 属性分配给类属性。我尝试通过扩展创建的部分类并自己分配此属性来解决此问题。直接将其添加到生成的类中效果很好。如果我尝试“buddy class”方法,稍后在代码执行中会收到以下错误:“Entity {Class Name} has no [Key] attribute。”

自动生成的类:

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; }

    }

}

代码片段:

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() 方法来跟踪所做的更改。上面的代码片段显示了一个函数的部分代码,该函数检查 DbEntityEntry 对象 (dbEntry) 以获取主键。

最佳答案

List 类是 Entity Framework 类还是 ListMetaData 类?如果它是 List 类,则该类中的 Id 属性根本没有任何属性。嵌套的ListMetaData类的Id属性具有attribute,这是一个完全不同的属性。

如果您希望 ListMetaData 类具有该属性,我会在模型中添加该类的一个表(如果还没有),取消嵌套该类并制作公开。

关于c# - 将 [Key] 属性分配给 Entity Framework 生成的类 - MVC4 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705586/

相关文章:

asp.net-mvc - 为文本框设置值 MVC 4 ASP

c# - Windows 10 中缺少 makecert.exe,如何获取和使用它

c# - SynchronizationAttribute.SUPPORTED 创建同步内容

c# - Telnet 服务器 -> 退格键/删除不起作用

c# - Entity Framework + 存储库 + 工作单元

c# - 令人困惑的一对多 Entity Framework 示例

c# - 违反了多重约束 Entity Framework 5

c# - 使用 TempData 几个

c# - Xamarin Forms 相对布局不会堆叠

jquery - MVC 不引人注目的验证与 JQuery 1.9 不起作用