StudentID
文字列への暗黙的な変換を行うというカスタム データ型があります。
StudentID
インスタンスを(値として)に渡しSqlCommand.Parameters.AddWithValue
てコマンドを実行すると、次のエラーが表示されます。
No mapping exists from object type StudentID to a known managed provider native type.
のようなパラメーターの型を指定SqlDbType.NVarChar
しても役に立ちません。機能する唯一の方法は、StudentID
値を文字列に明示的にキャストすることです。これは、暗黙的なキャストの目的を無効にします。
フレームワークは利用可能な変換を考慮していないと思います。StudentID
プリミティブ型への明示的なキャストを必要とせずに、コマンドがクラスを処理できるようにするためにクラスに対してできることはありますか?
この MSDN の記事では、プリミティブ型の処理方法について説明していますが、ユーザー定義型については説明していません。最も近いのは object で、Variant として渡されます。
失敗の正確なポイントは、署名付きの System.Data.SqlClient.MetaType.GetMetaTypeFromValue メソッドにありますprivate static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen)
。リフレクションは、プリミティブ型を探すことを明らかにし、TypeCode がオブジェクトの場合、SqlBoolean などの Sql* データ型を探すため、非常に特定の種類のプリミティブまたは Sql* 型を探しているようです。