Dapper/dapper extensions/dapper Rainbowなどを使用してモデルのプロパティを無視するにはどうすればよいですか
それらのdapperライブラリの?
Dapperの作成者であるSam Saffronは、別のSOユーザーの質問 here に対応してこの要件に対処しました。確認してください。
また、サムが彼の回答で述べた Dapper Extensions library を使用したい場合は、GithubまたはNugetから入手できます。
これは、ライブラリの Test Project のプロパティを無視する例です。
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();
}
}
}
Dapper.Contribには、列を計算済みとしてマークするための組み込みサポートがあります。 ComputedAttributeを追加して、挿入時に計算列をサポートできるようにする 。仕組みは次のとおりです。
class MyModel
{
public string Property1 { get; set; }
[Computed]
public int ComputedProperty { get; set; }
}
Computed
属性でマークされたプロパティは、挿入時に無視されます。
私の場合、私は _Dapper.Contrib
_ を使用しました。
任意のプロパティで[Write(false)]
属性を使用すると、問題を解決できます。 _[Computed]
_属性の使用を提案する人もいます。
_public class Person
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
[Write(false)]
public IEnumerable<Email> Emails { get; }
}
_
計算されたプロパティなしで基本クラスを設計し、それを挿入に使用できます。
class BasePerson
{
public String Name {get;set;}
}
class Person: BasePerson
{
public String ComputedProperty {get;set;}
}
Insert<BasePerson>(person);
DapperExtensionsを含めたくない場合は、標準からのDatabaseGenerated
System.ComponentModel.DataAnnotations.Schema
も使用できます。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]