Какой обнуляемый тип использовать для столбца varbinary в F # EFCore? - PullRequest
1 голос
/ 11 июня 2019

У меня есть столбец базы данных MSSQL, который может иметь значение null varbinary (8). Когда я пытаюсь сделать поле обнуляемым в моей записи 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)?

1 Ответ

1 голос
/ 11 июня 2019

У меня нет большого опыта работы с EF, и у меня нет всей настройки, чтобы попробовать это, но сообщение об ошибке, которое вы получаете, приходит из проверки типа F #, а не из EF.

проблема в том, что Nullable<'T> требует, чтобы тип 'T был типом значения - цель Nullable состоит в добавлении null к другим типам, которые не имеют null в качестве значения, например int или float.Тем не менее, массив может быть null сам по себе, и для этого ему не нужно Nullable.

Итак, если предположить, что EF здесь не делает ничего особенного, я думаю, что следующее должно помочь:

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

Учитывая SurveyResponse значение sr, вы можете проверить sr.ContactId <> null для обработки null значений.

...