web-dev-qa-db-ja.com

モデルプロパティのプロパティを無視する

Dapper/dapper extensions/dapper Rainbowなどを使用してモデルのプロパティを無視するにはどうすればよいですか

それらのdapperライブラリの?

21
Elisabeth

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();
        }
    }
}
10
Shiva

Dapper.Contribには、列を計算済みとしてマークするための組み込みサポートがあります。 ComputedAttributeを追加して、挿入時に計算列をサポートできるようにする 。仕組みは次のとおりです。

class MyModel
{
  public string Property1 { get; set; }

  [Computed]
  public int ComputedProperty { get; set; }
}

Computed属性でマークされたプロパティは、挿入時に無視されます。

24
Ben Collins

私の場合、私は _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; }
}
_
9
Ariful Islam

計算されたプロパティなしで基本クラスを設計し、それを挿入に使用できます。

  class BasePerson
    {
      public String Name {get;set;}
    }

    class Person: BasePerson
    {
     public String ComputedProperty {get;set;}
    }

    Insert<BasePerson>(person);
4
Alex

DapperExtensionsを含めたくない場合は、標準からのDatabaseGeneratedSystem.ComponentModel.DataAnnotations.Schemaも使用できます。

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
4
davidmdem