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

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

из этих прекрасных библиотек?

5 ответов

Решение

Создатель 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();
        }
    }
}

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)]
Другие вопросы по тегам