忽略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。因為如果在dapper查詢中使用select * from tablename ,它將只嘗試映射存在的列。因此,您不要為標記為[Computed]的屬性創建列。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因