У меня есть пользовательский тип, который я создал, который должен быть сохранен в базе данных (в данном случае, на SQL-сервере) в качестве guid (хотя этот вопрос так же актуален для объекта, который может храниться в виде строки, целого числа , так далее).
Когда я передаю этот тип в качестве параметра объекту DbCommand, я получаю исключение:
ArgumentException: не существует сопоставления между типом объекта [...] и собственным типом известного управляемого поставщика.
В классе есть операторы CType, которые позволяют неявное преобразование в строку или guid, но .NET не использует их, так как не знает, что должно преобразовывать тип.
Есть ли способ добавить тип во внутреннее сопоставление или иным образом сообщить .NET, как хранить мой пользовательский тип в базе данных?
Я, очевидно, могу сам преобразовывать тип при передаче его в .NET, но я бы хотел, чтобы это происходило автоматически, как это происходит с большинством встроенных типов.
Я пытался реализовать класс TypeConverter для моего типа (наследует от TypeConverter, переопределяет CanConvertFrom, CanConvertTo, ConvertFrom, ConvertTo, IsValid и добавил атрибут System.ComponentModel.TypeConverter в мой класс), но это все еще т работа.
Я предполагаю, что в нем отсутствует фрагмент, сообщающий .NET, какой тип преобразовывать при сохранении значения в базе данных.
Мой обходной путь для этого на данный момент заключается в том, что я перехватываю список параметров, прежде чем передать их на сервер SQL, и у меня есть метод, который изменяет мой пользовательский тип на guid. Это грязно, но пока работает, но я все еще думаю, что на этот вопрос нет ответа.