5

純粋な dapper を使用して、更新したいプロパティ (ホワイトリスト) のみで更新文字列を作成できることを知っています。

私が望むのは、ORM スタイルのダッパー拡張機能を維持することです。

con.Update<Person>(person);

個人の一部のプロパティが更新されないようにしたい (ブラックリスト)

.Update 拡張メソッドを実行してプロパティが更新されないようにするにはどうすればよいですか?

dapper スタイルの .Update 拡張機能をご存知ですか? (それから私はする必要はありません

書いてください ;-)

4

3 に答える 3

1

関連する型の ClassMapper で、次のようにします。

public MyTableMapper()
{
    Table("MyTable");
    Map(f => f.MyCalculatedField).ReadOnly();
}
于 2014-01-17T17:34:21.430 に答える
1

そのために別のクラスを使用してみることができます (たとえば、Person の子孫またはプロパティを無視する別のマッパーを使用してその周りのラッパー)。

しかし、それは良い解決策であるにはあまりにも醜いです。

DapperExtensions は現在、明示的な CRUD タスク以外には単純すぎます。System.ComponentModel アノテーションのサポートを追加するためだけにカスタム マッパーを開発する必要がありましたが、これは 2015 年にはばかげているように思えます。

しかし、新しい UpdatePartial 拡張メソッドを追加するのは良い考えに思えます。

于 2015-03-15T13:15:20.833 に答える
1

PersonMapperから継承する を定義し、除外する列をマップするためにClassMapper<Person>使用するだけです。Ignore()

プロパティ ( ) が除外されている以下の例を参照してください (ソース: Dapper 拡張機能の github テスト) 。PhonesIEnumerable<Phone> Phones

using System;
using System.Collections.Generic;
using DapperExtensions.Mapper;

namespace DapperExtensions.Test.Data
{
    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime DateCreated { get; set; }
        public bool Active { get; set; }
        public IEnumerable<Phone> Phones { get; private set; }
    }

    public class Phone
    {
        public int Id { get; set; }
        public string Value { get; set; }
    }

    public class PersonMapper : ClassMapper<Person>
    {
        public PersonMapper()
        {
            Table("Person");
            Map(m => m.Phones).Ignore();
            AutoMap();
        }
    }
}
于 2013-11-06T21:27:23.780 に答える