2017-01-12 7 views
1

私は事がSomeTypeで次のクエリDapperのファクトリオブジェクトの構築

_connection.Query<SomeType>(SELECT Id, Type, Time FROM table) 

のようなものを持っているが、今私がSomeType<object>または任意のいくつかの並べ替えを定義し、中にできる

public class SomeType<T> 
{ 
    public int Id { get; set; } 
    public SomeTypeType Type { get; set; } 
    public DateTime Time { get; set; } 
    public T Object { get; set; } 
} 

ジェネリック型であります正しいgenericを使用するにはSomeType<T>私はオブジェクトを再構築する必要があります。私が行うことができるようにしたいものを

は実際に

var x = _connection.Query<SomeType<object>>("...") as SomeType<OtherType> 

に動作しますこのようなラインを持つことである(もちろん、これは良い例ではありませんが、私の場合には、それははるかに理にかなっています)

いずれにせよ、これは明らかにnullを返し、実際には機能しません。

おそらく、型を構築する別の方法を定義することによって、おそらくdapperが型を初期化し、Factoryまたは何かを定義する方法にフックすることで考えました。

実際にどのようにすればいいのですか?

+0

だから、ネストされたオブジェクトのようなものだし、あなたはそれをクエリで満たす必要がありますか? –

答えて

1

Dapperで使用されるタイプの設定可能なファクトリについて認識していません。

私はgithubのコードをすばやく見ていましたが、明らかなことはありませんでしたが、網羅的な検索はしませんでした。

TypeHandlersがありますが、モデルオブジェクト自体を変更するのではなく、モデルオブジェクトのプロパティの値をマッピングするために多くのように見えます。

だから私は、あなたがより多くのマニュアルの方法でこれを処理しなければならないと思う:

public class SomeType 
{ 
    public int Id { get; set; } 
    public SomeTypeType Type { get; set; } 
    public DateTime Time { get; set; } 
    public T Object { get; set; } 
} 

public class SomeType<T> : SomeType 
{ 
    public T Object { get; set; } 

    public SomeType() { } 
    public SomeType(SomeType someType, T obj) 
    { 
     this.Id = someType.Id; 
     ... 
     this.Object = obj; 
    } 
} 

var someType = _connection.Query<SomeType>("SELECT Id, Type, Time FROM table"); 
var obj = new Foo(); 
var specialisedSomeType = new SomeType<Foo>(someType, obj); 

あなたが何かを使用することができますので、コンストラクタで「SomeType」から「SomeType」から手動マッピングは、退屈得ることができますそのビットを処理するにはAutoMapperのようにします。

関連する問題