質問: `SQL_VARIANT`列( )のマッピングを可能にするために、 `.NET Core 2.1 (preview)` Entity Framework Coreにサポートが最近追加されたようです。 これを行う方法は、新しい`HasConversion()`メソッド( )を使用しているようです。 だから、私のマッピングするために`SQL_VARIANT`列をしているとして基本となるデータ型を扱う`VARCHAR`任意の長さの(私はこの時点でそれを読んで気に)、私はここで、(次の操作を行うことができます`Value`ここ特性は、型のある`object`にはモデル): ``` entity.Property(e => e.Value).HasConversion(v => v.ToString(), v => v.ToString()); ``` これは、 `SQL_VARIANT`の基礎となるデータ型が任意の長さの`VARCHAR`である場合に機能します。 ただし、 `SQL_VARIANT`であるため、列には、 `DATETIME`値などの他のタイプのデータが含まれる場合があります。 簡単にするために、ここでは`DateTime`と`string`のみを指定しましたが、理論的には、 `SQL_VARIANT`列に格納できるものをマッピングするために必要なデータ型をサポートしたいと思います。 実行時にマッピングする2つのタイプ( `string`と`DateTime` )のどちらを決定するのですか?これを行う方法はありますか?
回答: 私が理解するように、現時点で行く方法はただです: ``` // where e.Value is property of type "object" entity.Property(e => e.Value).HasColumnType("sql_variant"); ``` それだけです。カスタムコンバーターは不要です。この機能を追加するプルメッセージには次のように記載されています。 > 次の場合、タイプマッパーはプロパティをsql_variant列にマップします。 > > * プロパティはタイプオブジェクトです > * ストアタイプ名はsql_variantとして指定されます > 現在のコードは最初の条件を満たしています(プロパティのタイプは`object` )が、2番目の条件は満たしていません。なぜ正確には、ストアのタイプ名を推測することはできません特性は、型オブジェクトのものから-私は確信して本当にないんだけど、Entity Frameworkのは、SQLサーバーの特定とサポート他の多くのデータベースではないかもしれないという理由だけで、その中`object`プロパティは異なる意味を持っているか、サポートされていないことができますまったく、したがって、明示的にあなたの意図を述べることが必要です。