Comment puis-je ignorer une propriété sur mon modèle en utilisant des extensions dapper/dapper/dapper Rainbow ou tout autre
de ces bibliothèques dapper?
Le créateur de Dapper Sam Saffron a répondu à cette exigence en réponse à une autre SO questions de l'utilisateur ici . Check it out).
De plus, si vous souhaitez utiliser la bibliothèque d'extensions Dapper que Sam a mentionnée dans sa réponse, vous pouvez l'obtenir auprès de Github ou via Nuget.
Voici un exemple d'ignorer les propriétés de la bibliothèque Test Project .
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 a une prise en charge intégrée pour marquer une colonne comme calculée: ajouter ComputedAttribute pour permettre la prise en charge des colonnes calculées lors de l'insertion . Voici comment ça fonctionne:
class MyModel
{
public string Property1 { get; set; }
[Computed]
public int ComputedProperty { get; set; }
}
Les propriétés marquées avec l'attribut Computed
seront ignorées dans les insertions.
Dans mon cas, j'ai utilisé Dapper.Contrib
.
L'utilisation de l'attribut [Write(false)]
sur n'importe quelle propriété devrait résoudre le problème. Certains suggèrent également d'utiliser l'attribut [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; }
}
Vous pouvez concevoir une classe de base sans la propriété calculée et l'utiliser pour vos insertions.
class BasePerson
{
public String Name {get;set;}
}
class Person: BasePerson
{
public String ComputedProperty {get;set;}
}
Insert<BasePerson>(person);
Pour ceux qui ne souhaitent pas inclure DapperExtensions, DatabaseGenerated
de la norme System.ComponentModel.DataAnnotations.Schema
peut également être utilisé.
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]