Rac*_*hel 12 c# sql-server entity-framework
例如,我的大多数实体都有DateCreated和DateModified字段.这些默认设置在SQL Server中设置为GetUtcDate().
如果我尝试创建一个实体并且不设置这些值,我会得到一个异常,说它无法运行SQL插入,因为日期值超出范围.有意义,因为C#默认日期是1/1/0001,而SQL Server的最小日期是1/1/1753.
那么有没有办法告诉EF要么使用SQL Server默认值,要么尝试插入尚未设置的列?
一种解决方案是使用partial覆盖您生成的entitycontext类。这将拦截EF上下文中所有实体类的插入/更新:
public partial class MyEntities : ObjectContext
{
public override int SaveChanges(SaveOptions options)
{
this.DetectChanges();
foreach (var insert in this.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added))
{
if (insert.Entity.HasProperty("DateCreated"))
insert.Entity.GetType().GetProperty("DateCreated").SetValue(insert.Entity, DateTime.UtcNow, null);
if (insert.Entity.HasProperty("LastModified"))
insert.Entity.GetType().GetProperty("LastModified").SetValue(insert.Entity, DateTime.UtcNow, null);
}
foreach (var update in this.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified))
{
if (update.Entity.HasProperty("LastModified"))
update.Entity.GetType().GetProperty("LastModified").SetValue(update.Entity, DateTime.UtcNow, null);
}
return base.SaveChanges(options);
}
}
Run Code Online (Sandbox Code Playgroud)
还是做类似的事情,在datestamp字段上查找插入/更新并将其从ObjectStateEntries集合中删除?
| 归档时间: |
|
| 查看次数: |
6758 次 |
| 最近记录: |