如何使用 LINQ 将空值发送到 ASP.NET 中的非空列

Posted

技术标签:

【中文标题】如何使用 LINQ 将空值发送到 ASP.NET 中的非空列【英文标题】:How to send a null value to a not null column in ASP.NET with LINQ 【发布时间】:2021-11-11 12:09:32 【问题描述】:

我的问题是这样的:

我在 SQL Server 中有一个表,它有一个 NOT NULL 列,它使用 SEQUENCE 作为默认值(NEXT VALUE FOR SeqDefa), 该列不是表中的 PK

我在 ASP.NET 中构建了一个在该表中执行 CRUD 的 Web 表单,当我想在该列中发送一个 null 值以使用该表中的默认值时,我得到一个错误。那是因为 LINQ 说您不能将空值发送到非空列

我该如何解决?

我可以从我的表单中的 LINQ 获取序列的下一个值吗? 除了将表列从非空更改为允许空之外,还有其他选择吗?

【问题讨论】:

你在使用实体框架吗? Linq 不是数据库技术。你使用的是 Linq-to-sql 还是其他的? 不确定您是否可以使用 LINQ 但使用 Pl/SQL 它是 select SequenceName.NEXTVAL from DUAL 【参考方案1】:

如果您使用的是 EF 内核,您还可以查看 Value converters。 编写一个简单的函数,当给定值为 null 时设置选定的默认值,或者如果您愿意,可以设置一些计算值。 多亏了这一点,您将不再需要在您的 linq 代码中具有一些特殊行为 - 通常在需要时使用 null,然后值转换器将处理其余部分。

【讨论】:

【参考方案2】:

如果您使用的是实体框架,那么您可能会在 fluent API 中寻找[DatabaseGenerated] 属性或.ValueGeneratedOnAdd()

Microsoft Documentation

【讨论】:

以上是关于如何使用 LINQ 将空值发送到 ASP.NET 中的非空列的主要内容,如果未能解决你的问题,请参考以下文章

将空值设置为列表中最接近的最后一个非空值 - LINQ

剑道网格发布和删除将空值发送到控制器

如何将空值附加到列表的开头? [复制]

将 JSON 从视图发送到控制器 ASP.NET MVC 会给出空值

jqGrid postdata 发送空值(mvc3 asp/net)

如何将 vb.net 中日期的空值传递给 sql 存储过程?