【发布时间】:2014-11-18 13:03:12
【问题描述】:
我想填写我的实体的CreatedOn 列。我知道覆盖SaveChanges() 并设置值的方法,如下所示:
public override int SaveChanges()
{
foreach (var item in ChangeTracker.Entries<ITrackableEntity>().Where(c => c.State == EntityState.Added))
{
item.Entity.CreatedOn = DateTime.Now;
}
return base.SaveChanges();
}
interface ITrackableEntity
{
DateTime? CreatedOn { get; set; }
}
问题是我正在设置客户端时间,这在我的情况下是不可接受的(多用户桌面应用程序,用户在他们的计算机上可能有不同的时间)。如何将 Sql 服务器时间设置为 CreatedOn 列?我不想在触发器中这样做。我想要一些能翻译成那个 SQL 的东西:
INSERT INTO SomeTable (Column1, CreatedOn)
VALUES Value1, GETDATE();
【问题讨论】:
-
您混淆了
INSERT和UPDATE语法 - 您不能将INSERT与SET .....一起使用。执行此操作的最佳位置是 触发器 - 为什么要断然排除此选项?? -
@marc_s 谢谢,我已经更正了 sql 语法。我相信触发器是我想避免的隐藏逻辑。而且我使用数据库优先的方法,不想编辑我的众多表格。
标签: .net entity-framework