Dapperのプロパティを無視する

dapper

質問

Dapper( http://code.google.com/p/dapper-dot-net/ )では、モデルクラスのプロパティを無視する方法、つまりInsert拡張メソッドを使用する方法がありますか?モデルクラスには、関連付けられたテーブルに保持されていない計算されたプロパティのセットがあります。

ありがとう。ペドロ

受け入れられた回答

DapperにはInsert拡張メソッドがありません。つまり、dapper.contrib、dapper拡張、またはdapper rainbowです。

Dapper自体で行うことができます:

Animal a = new Animal {Age = 10, Family = "Canine"}
// only insert Age
cnn.Execute("insert Animal(Age) values (@Age)", a); 

いくつかの拡張クラスを回避するには、以下のようにすることができます:

cnn.InsertExtension("Animal", new{a.Age});

それにもかかわらず、複雑なフィルター処理された挿入物については、いつでも元のDapperに戻すことができます。


人気のある回答

Dapper.Contribを使用している場合は、このコードをSqlMapperExtensionsでチェックアウトしてください:

https://github.com/StackExchange/dapper-dot-net/blob/master/Dapper.Contrib/SqlMapperExtensions.cs#L54-L66

        private static List<PropertyInfo> ComputedPropertiesCache(Type type)
        {
            //...
            var computedProperties = TypePropertiesCache(type).Where(p => p.GetCustomAttributes(true).Any(a => a is ComputedAttribute)).ToList();

https://github.com/StackExchange/dapper-dot-net/blob/master/Dapper.Contrib/SqlMapperExtensions.Async.cs#L147-L165

        var computedProperties = ComputedPropertiesCache(type);
        var allPropertiesExceptKeyAndComputed = allProperties.Except(keyProperties.Union(computedProperties)).ToList();
        //...
        for (var i = 0; i < allPropertiesExceptKeyAndComputed.Count; i++)
        {
            //...

したがって、クラスのプロパティにComputedAttributeを追加すると、Dapper.Contribはそれらをデータベースに挿入しようとしません! Dapperにこれらのプロパティを無視させることを心配する必要はありません.Dapper.Contribのみです。あなたの大まかなクエリでselect * from tablenameを使用select * from tablenameと、存在する列のみをマップしようとします。つまり、 [Computed]とマークしたプロパティの列を作成しないだけです。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow