【问题标题】:Entity Framework Save returning error with DateTime实体框架使用 DateTime 保存返回错误
【发布时间】:2015-09-17 10:57:45
【问题描述】:

在尝试保存具有DateTime 数据类型属性的实体时,我遇到了 EF 6 的一个奇怪问题。

我有一个表单,用户可以在其中将所需的值输入到实体的属性中,不过,因为我不需要通过前端指定所有这些值,所以在保存之前设置了几个项目。

所以,这是我的模型:

public partial class delivery_deviation
{
    public int delivery_deviation_id { get; set; }
    public System.Guid customer_id { get; set; }
    public byte week_nr { get; set; }
    public short year { get; set; }
    public System.DateTime created_date { get; set; }
    public System.Guid created_user { get; set; }

    public virtual sf_ec_customer sf_ec_customer { get; set; }
}

这是我的控制器中的操作:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "delivery_deviation_id,customer_id,week_nr,year")] delivery_deviation dd)
    {
        var identity = ClaimsManager.GetCurrentIdentity();
        var userId = identity.UserId;

        dd.created_user = userId;
        dd.created_date = DateTime.Now;

        if (ModelState.IsValid)
        {
            db.delivery_deviation.Add(dd);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        ViewBag.customer_id = new SelectList(db.sf_ec_customer, "id", "profile_provider", dd.customer_id);
        return View(dd);
    }

我可以清楚地看到 created_date 值不为空(请参见屏幕截图),但在保存时我总是收到以下 InnerException 消息的异常:

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

另外,这是我的表格的截图:

那么,我的代码有什么问题?我和办公室里的任何人都看不出这段代码有什么问题。

谢谢你, 最好的问候

编辑

这是我注意到对象签名不同的另一个屏幕截图,但我认为这很正常:

【问题讨论】:

  • 捕获DbUpdateException 异常并在Add 方法上查看那里的实体。它可以是另一个实体,而不是dd
  • 尝试添加一些代码(在调用 SaveChanges 之前)以获取所有已添加的实体,以查看是否为 为所有实体设置了 created_date。我怀疑在您发布的代码之外还有其他 dd 存在此问题。
  • @Hopeless 我检查了现有的 3 个对象(delivery_deviation 对象列表),没有发现日期为空或无效的对象。是的,没有其他 dd。
  • @Denis 看我的新截图。这就是你所说的关于成为另一个实体的意思吗?
  • 添加日志,比如:DbContext.Database.Log += s => System.Diagnostics.Debug.WriteLine(s); 看看EF执行了什么sql查询

标签: c# entity-framework datetime


【解决方案1】:

所以问题在于,由于某种原因,当从现有数据库生成代码优先时,并非所有映射都正确完成。

created_date 有一个属性 StoreGeneratedPattern 设置为 Computed。我为解决这个问题所做的只是,在 edmx 文件中将其设置为 None

噗,问题解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多