我现在已经建立了几个MVC3站点,并且认为我会给MVC4一个刺。但是我没有走得太远而且不确定为什么......
首先使用代码编写模型并生成数据库。但是,它无法正常工作并抛出验证错误,告诉我需要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 = "blah@blahblah.com",
Password = "3f9cbbb2dad0774468af842678b11dafa7a16d81",
},
};
users.ForEach(u => context.Users.Add(u));
context.SaveChanges();
...bunch more stuff...
}
}
当调用context.SaveChanges()时,程序抛出ValidationError,通知我&#34; UserId字段是必需的。&#34;
我在这里缺少什么?
答案 0 :(得分:2)
UserId应该是int还是Guid不应该呢?
答案 1 :(得分:1)
看起来好像EF在生成数据库时没有创建UserId作为主键和标识列。抛出此错误是因为UserId是一个不可为空的int,并且不能保留为null。您可以在SSMS的列属性中手动将SQL Server列更改为Identity,但我认为使用[Key]属性装饰UserId以强制它成为数据库生成的主键更容易:
[Key]
public int UserId { get; set; }
请注意,这需要System.ComponentModel.DataAnnotations命名空间