2013-10-31 20 views
13

Jak mogę ignorować nieruchomości na mojego modelu przy użyciu Wytworny Wytworny/rozszerzenia/Wytworny tęczy ani żadnychIgnoruj ​​właściwości modelu własności

Wytworny tych bibliotek?

+0

Za jaką operację CRUD? – Alex

+0

Do wstawienia (osoba). osoba ma rodzaj wyliczonej własności. Które nie należą do bazy danych. – Elisabeth

+1

Ponieważ żadna z poniższych odpowiedzi nie stanowi rozwiązania dla projektu opartego na Dapper.Rainbow, dodaję ten komentarz. Dapper Rainbow ma atrybut IgnoreProperty, który może być użyty. Twoja klasa POCO musi odwoływać się do Dapper.Rainbow. {SQL}, a następnie możesz użyć [IgnoreProperty (true)] dla właściwości, które chcesz wykluczyć. –

Odpowiedz

8

Wytworny twórca Sam Saffron zajęła ten wymóg w odpowiedzi na pytania sobą tak użytkownika here. Sprawdź to.

Ponadto, jeśli chcesz użyć Dapper Extensions library, o którym wspomniał Sam w swojej odpowiedzi, możesz pobrać go z Github lub przez Nuget.

Oto przykład ignorowania właściwości z biblioteki Test Project Biblioteki.

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(); 
     } 
    } 
} 
+1

Gdzie/Kiedy utworzysz klasę PersonMapper? Czy zaawansowane rozszerzenia szukają klasy Mapper, używając łańcucha entityname + "Mapper" i próbując go utworzyć? – Elisabeth

+2

Tak, wierzę, że funkcja AutoMapper rozszerzeń Dappera szuka nazwy pojedynczej encji + przyrostka "Mapper", aby automapować pola do zignorowania, pola o różnych nazwach itp. Innymi słowy, myślę (nie próbowałem tego) powinieneś być w porządku po prostu definiując tę ​​klasę PersonMapper i ignorując pola, które chcesz ignorować z POCO. Zobacz dokumentację tutaj: https://github.com/tmsmith/Dapper-Extensions/wiki/AutoClassMapper – Shiva

+0

Dobrze mi pomogło. Moja klasa XXXMapper ma tę samą przestrzeń nazw. – Elisabeth

3

Można zaprojektować klasę podstawową bez właściwości obliczeniowych i użyć jej dla wstawek.

class BasePerson 
    { 
     public String Name {get;set;} 
    } 

    class Person: BasePerson 
    { 
    public String ComputedProperty {get;set;} 
    } 

    Insert<BasePerson>(person); 
12

Dapper.Contrib posiada wbudowane do znakowania kolumnę obliczonego: add ComputedAttribute to allow support for computed columns on Insert. Oto jak to działa:

class MyModel 
{ 
    public string Property1 { get; set; } 

    [Computed] 
    public int ComputedProperty { get; set; } 
} 

Właściwości oznaczone atrybutem Computed będą ignorowane na wkładkach.

+0

Istnieje także atrybut '[Write (false)]'. Czy ktoś może powiedzieć jaka jest różnica między '[Computed]' a '[Write (false)]? – vaheeds

+1

@vaheeds moje najlepsze przypuszczenie jest takie, że zostały dodane w różnych czasach przez różnych ludzi, którzy być może nie byli świadomi innych. Dodałem atrybut "Computed" i nie znałem żadnego atrybutu "Write" w tym czasie. –

3

W moim przypadku użyłem Dapper.Contrib.
Zastosowanie atrybutu dowolnej właściwości powinno rozwiązać problem. Niektórzy sugerują również użycie atrybutu [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; } 
} 
1

Dla tych, którzy nie chcą, to DapperExtensions DatabaseGenerated ze standardowej System.ComponentModel.DataAnnotations.Schema mogą być również wykorzystywane.

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
+0

To rozwiązanie nie działa z Dapper 1.50.2, na .NET CORE –

Powiązane problemy