尽管提供了价值,但实体框架仍插入null

时间:2020-10-26 12:19:21

标签: c# sql-server asp.net-mvc-5 entity-framework-6

我正在尝试使用实体框架将数据保存到SQL Server表中。我正在使用数据库优先方法。但是我继续收到user_id为null的错误,但是我已经在代码中将其分配了:

无法将值NULL插入表'dbo.Users'的'user_id'列中;列不允许为空。 INSERT失败。
该声明已终止。

这是我的代码:

    public ActionResult SaveUser(User user)
    {
        using (DBEntities entities = new DBEntities())
        {
            int maxUserId = entities.Users
                .Select(u => u.user_id)
                .DefaultIfEmpty(0)
                .Max();

            user.user_id = maxUserId + 1;

            entities.Users.Add(user);                
            entities.SaveChanges();

            return RedirectToAction("Index", "Users");
        }
    }

用户类别:

public partial class User
{  
    public int user_id { get; set; }
    public string username { get; set; }
    public Nullable<System.DateTime> Date_Captured { get; set; }       
}

谢谢。

2 个答案:

答案 0 :(得分:0)

如果没有用户,则user_id将返回null,因此无法插入新用户。这不是获取唯一ID的正确方法。请参阅@Jeroen Mostert的评论

答案 1 :(得分:0)

public partial class User
{  
[Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int user_id { get; set; }
    public string username { get; set; }
    public Nullable<System.DateTime> Date_Captured { get; set; }       
}


public ActionResult SaveUser(User user)
    {
        using (DBEntities entities = new DBEntities())
        { // dont set Id    
            entities.Users.Add(user);                
            entities.SaveChanges();

            return RedirectToAction("Index", "Users");
        }
    }