Dapper.NetとDapper.Net拡張の "NotMapped"に相当するものはありますか?

dapper micro-orm

質問

私はDapper.Netで遊び始めましたが、これまでのところ本当に愛していますが、私は1つの問題にぶつかりました。

次のようなPOCOクラスがあるとします。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return FirstName + " " + LastName; } }
}

Dapper.NetとDapper.Net拡張を使用して、このデータ型のインスタンスをすべてDBからロードするだけです:

string connectionString = CloudConfigurationManager.GetSetting("DBConnection");
using (SqlConnection cn = new SqlConnection(connectionString))
{
    cn.Open();

    IEnumerable<Types.Person> entities = cn.GetList<Types.Person>();
    var forceMe = entities.ToList();
}

これはLinqの設定でうまく動作しますが、評価を強制する.ToList()で行をヒットすると、FullNameの "無効な列名"で爆発します。 NotMappedのEntity Framework DataAnnotationsを尊重するかもしれないと思って、NotMapped属性を追加しようとしました(プロジェクトにEF 5を追加した後)。これはうまくいかなかった。

ですから、Dapper.NetにDBから列が期待できないようにするにはどうすればいいですか?これはモデルのPOCOで見られるすべてのものに対してDB列をマップしようとしている拡張機能の問題ですか?私はSQLを書くことに戻す必要がありますか、明示的に私が欲しいだけの列を要求するか、列にNotMappedを取得する方法がありますか?

前もって感謝します。

-アダム

受け入れられた回答

特定のプロパティをマップするのを無視する唯一の方法は、カスタムフィールドのマッピングを指定できる自動クラスマッパーを実装することです。例えば:

public class CustomMapper : ClassMapper<Foo>
{
    public CustomMapper()
    {
        Table("FooTable");
        Map(f => f.Id).Column("FooId").Key(KeyType.Identity);
        Map(f => f.DateOfBirth).Column("BirthDate");
        Map(f => f.FirstName).Column("First");
        Map(f => f.LastName).Column("Last");
        Map(f => f.FullName).Ignore();
        Map(f => f.Calculated).ReadOnly();
    }
}

public class Foo
{
    public int Id { get; set; }
    public DateTime DateOfBirth { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName
    {
        get { return string.Format("{0} {1}", FirstName, LastName); }
    }
}

上記の例では、FullNameは無視されています。

自動マッパでは、POCOクラス名がテーブル名と一致しない場合にテーブル名を調整することもできます。

また、POCOクラスと同じアセンブリ内にカスタムマップを保持する必要があることに注意してください。ライブラリはリフレクションを使用してカスタムマップを検索し、1つのアセンブリのみをスキャンします。

これが役立つことを願って、幸運



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ