主键必须使用EFCode称为“Id”?

时间:2011-02-25 18:10:12

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

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

通过右键单击将IdClient定义为主键,并将Identity设置为Yes并自动增量等等。一切似乎都很好......当我运行应用程序时,它告诉我该表没有定义键!! / p>

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

谢谢!

2 个答案:

答案 0 :(得分:5)

我认为你的意思是实体框架代码优先。

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

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

实体框架代码首先使用约定优于配置,默认情况下将查找名为“ID”的列以使其成为主键。否则你必须以声明方式。

答案 1 :(得分: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时自动将列设置为主键。