我有一个MSSQL数据库列,该列是可为空的varbinary(8)。当我尝试使该字段在F#记录中可为空时,出现以下错误:
“通用结构要求类型'byte []'具有公共默认构造函数”
Nullable<byte[]>
,Nullable<Byte[]>
,Nullable<Byte list>
或Nullable<seq<byte>>
都不会超出此错误。
为简洁起见,我省略了其他字段。
[<Table("SurveyResponse"); CLIMutable>]
type SurveyResponse = {
mutable ContactId: Nullable<byte[]>
}
我可以使用EF Core可以正确转换为varbinary(8)的F#类型吗?
答案 0 :(得分:1)
我在EF方面没有太多经验,也没有足够的设置来尝试此操作,但是您收到的错误消息来自F#类型检查器而非EF。
问题是Nullable<'T>
要求类型'T
是值类型-Nullable
的目的是将null
添加到其他没有{ {1}}作为值,例如null
或int
。但是,数组本身可以是float
,因此不需要null
。
因此,假设EF在这里没有做任何特别的事情,我认为以下方法可以解决问题:
Nullable
鉴于[<Table("SurveyResponse"); CLIMutable>]
type SurveyResponse = {
mutable ContactId: byte[]
}
值SurveyResponse
,您可以选中sr
处理sr.ContactId <> null
值。