F#EFCore中的varbinary列使用哪种可空类型?

时间:2019-06-10 21:26:13

标签: f# ef-core-2.1

我有一个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#类型吗?

1 个答案:

答案 0 :(得分:1)

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

问题是Nullable<'T>要求类型'T是值类型-Nullable的目的是将null添加到其他没有{ {1}}作为值,例如nullint。但是,数组本身可以是float,因此不需要null

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

Nullable

鉴于[<Table("SurveyResponse"); CLIMutable>] type SurveyResponse = { mutable ContactId: byte[] } SurveyResponse,您可以选中sr处理sr.ContactId <> null值。