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