web-dev-qa-db-fra.com

Ignorer la propriété sur la propriété du modèle

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?

21
Elisabeth

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();
        }
    }
}
10
Shiva

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.

24
Ben Collins

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; }
}
9
Ariful Islam

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);
4
Alex

Pour ceux qui ne souhaitent pas inclure DapperExtensions, DatabaseGenerated de la norme System.ComponentModel.DataAnnotations.Schema peut également être utilisé.

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
4
davidmdem