Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Linq2Sql中的默认列值_.net_Linq To Sql - Fatal编程技术网

.net Linq2Sql中的默认列值

.net Linq2Sql中的默认列值,.net,linq-to-sql,.net,Linq To Sql,假设我有一个表,其中CreatedBy Datetime列的默认值为GETDATE() 输入LinqToSql 据我目前了解,我有两个选择: 插入日期时间。现在在linkToSql“Insert”语句中手动插入 将“自动生成的值”设置为True,现在Linq2Sql将忽略我为CreatedDate提供的值 如果我想保留设置值的选项,但不被迫提供它(就像我在T-SQL中所做的那样),该怎么办?使列可以为空。创建一个触发而不是插入的触发器,如果提供的值为null,则将其设置为当前日期。为该字段的

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

输入LinqToSql

据我目前了解,我有两个选择:

  • 插入日期时间。现在在linkToSql“Insert”语句中手动插入
  • 将“自动生成的值”设置为True,现在Linq2Sql将忽略我为CreatedDate提供的值

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

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

这不会强制您提供一个值,但如果您尝试设置它,您将无法将其置空。触发器将在insert和任何更新时提供默认值,因为属性更改方法不允许将其设置为null,所以应该保证它有一个值

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


FWIW,我通常只走自动生成的路线。我没有任何在记录上手动设置CreatedDate的场景。我可能会在紧急情况下手动更新一个,但我甚至记不起什么时候必须这样做。

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

这不会强制您提供一个值,但如果您尝试设置它,您将无法将其置空。触发器将在insert和任何更新时提供默认值,因为属性更改方法不允许将其设置为null,所以应该保证它有一个值

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


FWIW,我通常只走自动生成的路线。我没有任何在记录上手动设置CreatedDate的场景。我可能会在紧急情况下亲自去更新一个,但我甚至记不起什么时候必须这么做了。

你是对的,对于给定的DataContext只有这两个选项。

你是对的,对于给定的DataContext只有这两个选项。

那会起作用,但似乎添加可维护性问题只是为了解决linqtosql问题,我注意到我实际上并没有这样做。从我的角度来看,我更喜欢在列上默认设置这个值,并使用自动生成的方法。对于修改日期,我使用自动生成和更新触发器。因为我与此一致,所以我不认为这会增加太多的维护负担。这会起作用,但似乎只是为了解决linqtosql问题而增加可维护性问题。我注意到我实际上并没有这样做。从我的角度来看,我更喜欢在列上默认设置这个值,并使用自动生成的方法。对于修改日期,我使用自动生成和更新触发器。因为我与此一致,所以我不认为这会增加太多的维护负担。