Игнорировать свойство свойства модели

Как игнорировать свойство на моей модели, используя dapper/dapper extensions/dapper rainbow или любой

из тех библиотек dapper?

Ответы

Ответ 1

Создатель Dapper Сэм Шаффрон обратился к этому требованию в ответ на другие вопросы пользователя SO здесь. Проверьте это.

Кроме того, если вы хотите использовать библиотеку Dapper Extensions, которую Сэм упомянул в своем ответе, вы можете получить ее от Github или через Nuget.

Здесь приведен пример игнорирования свойств из проекта тестирования библиотеки.

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

Ответ 2

Dapper.Contrib имеет встроенную поддержку для маркировки столбца как вычисленного: добавьте ComputedAttribute, чтобы разрешить поддержку вычисляемых столбцов в Insert. Вот как это работает:

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

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

Свойства, помеченные атрибутом Computed будут игнорироваться при вставках.

Ответ 3

Вы можете создать базовый класс без вычисленного свойства и использовать его для своих вставок.

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

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

    Insert<BasePerson>(person);

Ответ 4

В моем случае я использовал 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; }
}

Ответ 5

Для тех, кто не хочет включать DapperExtensions, DatabaseGenerated из стандартной System.ComponentModel.DataAnnotations.Schema может быть использован.

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]