0

我现在已经建立了几个 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,通知我“需要 UserId 字段”。

我在这里想念什么?

4

2 回答 2

2

UserId 可能应该是一个 int 或 Guid 不是吗?

于 2012-07-17T17:07:26.983 回答
1

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

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

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

于 2012-07-18T01:03:50.080 回答