gpt4 book ai didi

c# - 将 NULL 值传递给 LINQ 中的日期时间字段

转载 作者:太空狗 更新时间:2023-10-29 22:20:36 28 4
gpt4 key购买 nike

我的数据库表是这样的

CREATE TABLE MYBUDGET.tbl_CurrentProperty
(
[PropID] INT NOT NULL IDENTITY(1,1),
[UpdatedOn] DATETIME NOT NULL,
[Amount] MONEY NOT NULL,
[Remarks] VARCHAR(100) NOT NULL,
)
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT PK_CurrentProperty_PropID PRIMARY KEY ([PropID])
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT DF_CurrentProperty_UpdatedOn DEFAULT (DATEADD(MINUTE,30,DATEADD(HOUR, 5, GETUTCDATE()))) FOR [UpdatedOn]
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT CK_CurrentProperty_Amount CHECK([Amount] > -1)
GO

我正在使用 LINQ to SQL。在 C# 中,我只需要传递 [Amount] 和 [Remarks] 字段,其他字段必须使用它们的默认值([PropID] 和 [UpdatedOn])。

在 C# 中,我创建了如下所示的 tbl_CurrentProperties 对象,

tbl_CurrentProperties currentProperties = new tbl_CurrentProperties();
currentProperties.Amount = 50.00M;
currentProperties.Remarks = "remarks";

然后将对象提交到数据上下文。但是在这里,Linq 为 UpdatedOn 字段分配了 '1/1/0001 12:00:00 AM'。但这违反了 SQL 日期时间范围 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM 并发生异常。此外,我无法为 DateTime 字段手动分配 NULL 值,因为它是不可为 null 的类型。无论如何,我需要让它使用它的默认约束。我该怎么做?


PS:我想这样使用它是因为,我的数据库是在线的,用户在不同的位置。所以如果我使用 DateTime.Now,用户机器中的时间可能是错误的,并且它会在数据库中插入一个错误的值。我需要始终使用 SQL 服务器时间。

最佳答案

Andrey's answer部分正确。我刚刚测试了这个,这就是我发现的。

在您的 dbml 设计器中,在您的 UpdatedOn 列上设置以下内容:

Auto Generated Value = True 
Nullable = False

然后,在 INSERT 上,如果您使用 SQL Server Profiler查看生成的 SQL,您会看到 UpdatedOn 不包含在 INSERT 中。甚至不是空值。这一点很重要:要让 SQL Server 使用该列的默认值,必须从 INSERT 中省略列。如果您在 UpdatedOn 上设置 Nullable = True,LINQ to SQL 可能包括 INSERT 上的列空值。

仅供引用,在 INSERT 之后应该有一个 SELECT,其中 LINQ to SQL 正在检索自动生成的值,因此您的实体对象具有最新值。

关于c# - 将 NULL 值传递给 LINQ 中的日期时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750193/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com