Итак, отвечая на ваш первоначальный вопрос: «Я хочу настроить общее преобразование типов для типов Option, чтобы EF знал, как с ними обращаться».Я предполагаю, что вы имеете в виду, что вы хотите, чтобы EF правильно отобразил опцию в столбец «NULL» соответствующего базового типа, и что у вас возникают проблемы, потому что EF не знает, как обрабатывать FSharp.Option?
Вместо этого вы могли бы просто использовать Nullable вместо Option для ваших типов EF, и он разрешится так же, как и в C #.
Так, например, ваш пример типа становится:
type [<CLIMutable>] User = {
[<DatabaseGenerated(DatabaseGeneratedOption.Identity)>]
UserID : int64
FirstName : string
LastName : string
LastLoggedInTime : Nullable<DateTimeOffset>
}
Длятипы, которые не могут иметь значение Nullable, но являются опциями в вашем домене (например, строки), вы просто устанавливаете их в качестве базового типа, и он будет отлично работать.
Если вы сопоставляете типы доменов F # где-то еще,вы можете просто использовать Option.ToNullable и Option.OfNullable там, или сопоставить None со значением NULL, если тип не может быть обнуляем, как указано выше.
Надеюсь, это поможет!