我有很多包含默认值的表,例如CreatedDateTime (getutcdate())
. 但是现在,值 0001-01-01 00:00:00.0000000 被存储了。
https://stackoverflow.com/a/35093135/7731479 --> 这无效,我必须为每个数据库模型更新(edmx)手动为每个表执行此操作。如何自动将所有 StoreGeneratedPattern 更新为 Computed?或者为什么它不会自动计算?
https://stackoverflow.com/a/43400053/7731479 --> ado.net 生成所有属性,我无法再次生成CreatedDateTime
。
有没有自动解决方案?
我正在使用实体框架和 ado.net。
Person person = new Person()
{
Id = id,
Name = name,
};
AddToPerson(person);
SaveChanges();
我想在上面使用。我不想使用以下内容并再次分配 CreatedDeteTime,因为它是在 MSSQL 中使用默认值 getutcdate() 分配的。
Person person = new Person()
{
Id = id,
Name = name,
CreatedDeteTime = DateTime.UtcNow;
};
AddToPerson(person);
SaveChanges();
我找到了两个解决方案:
1- 此解决方案解决所有具有相同属性的实体,例如CreatedDateTime
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.GetType().GetProperty("CreatedDateTime") != null && insert.Entity.GetType().GetProperty("CreatedDateTime").GetType().Name == "DateTime" && (DateTime)(insert.Entity.GetType().GetProperty("CreatedDateTime").GetValue(insert.Entity)) == DateTime.Parse("0001-01-01 00:00:00.0000000"))
insert.Entity.GetType().GetProperty("CreatedDateTime").SetValue(insert.Entity, DateTime.UtcNow, null);
}
return base.SaveChanges(options);
}
}
参考:https : //stackoverflow.com/a/5965743/7731479
2-
public partial class Person
{
public Person()
{
this.CreatedDateTime = DateTime.UtcNow;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句