Как я могу игнорировать свойство моей модели, используя dapper/dapper extensions/dapper Rainbow или любой другой?
из этих щеголеватых библиотек?
Как я могу игнорировать свойство моей модели, используя dapper/dapper extensions/dapper Rainbow или любой другой?
из этих щеголеватых библиотек?
Создатель Dapper Сэм Саффрон ответил на это требование в ответ на вопросы другого пользователя SO здесь. Проверьте это.
Кроме того, если вы хотите использовать библиотеку расширений Dapper, которую Сэм упомянул в своем ответе, вы можете получить его из 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 имеет встроенную поддержку пометки столбца как вычисляемого: поддержка вычисляемых столбцов в Insert. Вот как это работает:
class MyModel
{
public string Property1 { get; set; }
[Computed]
public int ComputedProperty { get; set; }
}
Свойства, отмеченные атрибутом Computed
, будут игнорироваться при вставке.
[Write(false)]
. Кто-нибудь может сказать, в чем разница между [Computed]
и [Write(false)]
?
- person vaheeds; 04.04.2017
Computed
и в то время не знал ни о каком атрибуте Write
.
- person Ben Collins; 09.05.2017
[Computed]
означает, что этот столбец находится в базе данных, но является Вычисляемый столбец, но [Write(false)]
означает, что этого столбца нет в базе данных
- person stuartd; 05.12.2018
В моем случае я использовал 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)]