Linq2Sql中的默认列值

时间:2009-04-25 00:54:32

标签: .net linq-to-sql

假设我有一个带有CreatedBy Datetime列的表,默认值为GETDATE()......

输入LinqToSql

据我所知,到目前为止,我有两种选择:

  • 在linkToSql“insert”语句中手动插入DateTime.Now
  • 将“自动生成的值”设置为True,现在Linq2Sql将忽略我为CreatedDate提供的值

如果我想保留设置值的选项,但不强制提供它(如我在T-SQL中那样),该怎么办?

2 个答案:

答案 0 :(得分:1)

你是对的,这是给定DataContext的唯一两个选项。

答案 1 :(得分:0)

让列可以为空。创建触发而不是插入的触发器,如果​​提供的值为null,则将其设置为当前日期。为该字段的属性更改方法提供部分方法,如果尝试将该字段设置为null,则抛出异常。

这不会强制您提供值,但如果您尝试设置它,则无法将其清空。触发器将在插入时提供默认值,并且在任何更新时都应该保证它具有值,因为属性更改方法将不允许将其设置为null。

编辑:如果您想避开触发器并且不介意插入的实际时间与列值之间存在(可能很小)差异的可能性,您可以实现部分方法用于创建并直接设置日期的后备字段。通过不使用该属性,我认为您将避免虚假更新,因为不会触发属性更改事件。你必须测试它,看它是否按你想要的方式工作。这样做的一个优点是它可以在不涉及数据库的情况下进行完全单元测试。

FWIW,我通常只是去自动生成的路线。我没有任何情况可以在记录上手动设置CreatedDate。我可能会在紧急情况下进入并更新一个,但我甚至不记得我必须这样做。

相关问题