【问题标题】:Primary key has to be called "Id" using EFCode?必须使用 EFCode 将主键称为“Id”吗?
【发布时间】:2011-02-25 18:10:11
【问题描述】:

我正在使用 ASP MVC 3 并基于音乐商店教程编写应用程序。我安装了 EFCode 框架,并通过右键单击 App_Data 文件夹创建了一个数据库。 表“客户”的列是 客户身份 名称

IdClient 通过右键单击它被定义为主键,Identity 设置为 Yes 和 autoincrement 等。一切似乎都很好......当我运行应用程序时,它告诉我这个表没有定义任何键!!

如果我将 IdClient 重命名为 Id 没有问题,我的问题是为什么它不检测 IdClient 作为主键?在教程数据库中,主键没有用名称“Id”定义...

谢谢!

【问题讨论】:

    标签: asp.net sql-server asp.net-mvc entity-framework


    【解决方案1】:

    我假设您的意思是实体框架代码优先。

    您可以将[Key] 属性添加到该列。

    public class Product
    {
        [Key]
        public int TestID { get; set; }
    }
    

    Entity Framework Code First 使用约定优于配置,默认情况下将查找名为“ID”的列以使其成为主键。否则,您必须以声明方式进行。

    【讨论】:

    • 我试过了,但它告诉我“找不到类型或命名空间名称‘键’(您是否缺少 using 指令或程序集引用?)我找不到 using 语句应该有 =S
    • 使用 System.ComponentModel 发现我丢失了;使用 System.ComponentModel.DataAnnotations;
    【解决方案2】:

    你必须做两件事之一

    1) 使用 DataAnnotations,并在您的模型类中为您的 idClient 属性提供 [Key] 属性。这将告诉 EF idClient 是您的主键。

    2) 在数据上下文的类中,您可以覆盖OnModelCreating(ModelBuilder modelBuilder) 方法。在该方法中,您必须调用 modelBuilder.Entity<MyEntity>().HasKey(x => x.idClient); 之类的名称,以便 EF 知道这是一个身份和键列。

    默认情况下,EF4 Code First 仅自动将名为 Id<entity name>Id 的列设置为主键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多