【问题标题】:Entity Framework inserting null despite providing value尽管提供了值,但实体框架仍插入 null
【发布时间】:2021-02-08 16:50:57
【问题描述】:

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

无法将值 NULL 插入列“user_id”、表“dbo.Users”;列不允许空值。插入失败。
声明已终止。

这是我的代码:

    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; }       
}

谢谢。

【问题讨论】:

  • 即使这样可行,这也不是获取唯一 ID 的正确方法。如果多个请求大致同时到达,这是不安全的。在服务器端使用IDENTITY 列或显式SEQUENCE

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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");
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 2016-07-05
      • 2013-03-10
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多