ASP.NET MVC4实体框架,不会生成数据库,说ID字段是必需的吗?

时间:2012-07-17 16:43:21

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

我现在已经建立了几个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;

我在这里缺少什么?

2 个答案:

答案 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命名空间