Игнорировать свойство свойства модели
Как игнорировать свойство на моей модели, используя 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)]