2012-07-17 33 views
0

我已经建立了几个MVC3网站,并认为我会给MVC4刺。但我不是很远,不确定为什么...ASP.NET MVC4实体框架,不会生成数据库,说ID字段是必需的?

先使用代码写我的模型,并生成数据库。然而,它不起作用,并抛出验证错误,告诉我ID字段是必需的。我遵循他们的命名约定,甚至尝试了几个不同的教程,并且没有任何内容可以工作。在过去,EF已经能够确定我的PK,并且不必担心为插入指定它们。在我看到的所有MVC4教程中,似乎都是这种情况,但即使完全按照它们来做,我的数据库也不会生成。

我的用户模型的

截断例如:

public class User 
{ 
    public int UserId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; } 
} 

然后,我的初始值设定,导致该错误:

public class WorkoutInitializer : DropCreateDatabaseIfModelChanges<WorkoutContext> 
{ 
    protected override void Seed(WorkoutContext context) { 

     var users = new List<User> 
     { 
      new User { 
       FirstName = "D", 
       LastName = "H", 
       Email = "[email protected]", 
       Password = "3f9cbbb2dad0774468af842678b11dafa7a16d81", 

      }, 
     }; 
     users.ForEach(u => context.Users.Add(u)); 
     context.SaveChanges(); 

     ...bunch more stuff... 
    } 
} 

程序抛出一个ValidationError时context.SaveChanges()被调用,通知我说“UserId字段是必需的。”

我在这里错过了什么?

+1

您确定您的UserId是字符串类型吗? – Shyju 2012-07-17 16:44:34

+0

你试过命名UserId只是'Id'吗? – TheGeekYouNeed 2012-07-17 18:56:35

回答

1

它看起来好像EF没有创建UserId作为主键和生成数据库时的标识列。由于UserId是一个不可为空的int,因此不能抛出此错误。您可以在SSMS的列属性中手动将SQL Server列更改为Identity to Yes,但我认为使用[Key]属性修饰UserId可以更容易地将其强制为数据库生成的主键:

[Key] 
public int UserId { get; set; } 

请注意,这需要System.ComponentModel.DataAnnotations命名空间

+0

我会将此标记为答案,但我从未真正明白过。必须创建一个新项目并复制所有文件,并且它工作正常。嗯。 – Danny 2012-08-14 07:54:00

2

UserId应该可能是int或guid不应该吗?

相关问题