在尝试保存属性为DateTime
数据类型的实体时,我遇到了一个奇怪的问题。
我有一个表单,用户将所需的值输入到实体的属性中,但是,因为我不需要通过前端指定所有这些值,所以在保存之前设置了几个项目
所以,这是我的模特:
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',table' CMS_DEV.dbo.delivery_deviation&#39 ;;列不允许空值。 INSERT失败。 声明已经终止。
另外,这是我桌子的截图:
那么,我的代码出了什么问题?我或办公室里的任何人都没有发现此代码有任何问题。
谢谢你, 最诚挚的问候
这是另一个截图,我发现对象签名不同,但我认为这是正常的:
答案 0 :(得分:0)
所以问题在于,出于某种原因,当从现有数据库生成代码优先时,并非所有映射都正确完成。
created_date
将属性StoreGeneratedPattern
设置为Computed
。我所做的就是在edmx文件中将其设置为None
。
Puff,问题解决了。