尽管提供了值,但实体框架仍插入 null
Posted
技术标签:
【中文标题】尽管提供了值,但实体框架仍插入 null【英文标题】:Entity Framework inserting null despite providing value 【发布时间】: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
。
【参考方案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");
【讨论】:
以上是关于尽管提供了值,但实体框架仍插入 null的主要内容,如果未能解决你的问题,请参考以下文章