首页 > 解决方案 > F# EFCore 中的 varbinary 列使用什么可为空的类型?

问题描述

我有一个可以为空的 varbinary(8) 的 MSSQL 数据库列。当我尝试在我的 F# 记录中使该字段可为空时,我收到以下错误:

“通用构造要求类型 'byte[]' 具有公共默认构造函数”

Nullable<byte[]>, Nullable<Byte[]>,Nullable<Byte list>或超出Nullable<seq<byte>>此错误。

为简洁起见,我省略了其他字段。

[<Table("SurveyResponse"); CLIMutable>]
type SurveyResponse = {
    mutable ContactId: Nullable<byte[]>
}

是否有一个可以为空的 F# 类型,我可以使用 EF Core 正确转换为 varbinary(8)?

标签: f#ef-core-2.1

解决方案


我对 EF 没有太多经验,也没有尝试此操作的所有设置,但是您收到的错误消息来自 F# 类型检查器,而不是来自 EF。

问题是Nullable<'T>要求类型'T是值类型 - 的目的Nullable是添加null到其他没有null值的类型,例如intor float。但是,数组可以null独立存在,不需Nullable要这样做。

因此,假设 EF 在这里没有做任何特别的事情,我认为以下应该可以解决问题:

[<Table("SurveyResponse"); CLIMutable>]
type SurveyResponse = {
    mutable ContactId: byte[]
}

给定一个SurveyResponsesr,您可以检查sr.ContactId <> null以处理null值。


推荐阅读