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?
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?
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();
}
}
}
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
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
Dobrze mi pomogło. Moja klasa XXXMapper ma tę samą przestrzeń nazw. – Elisabeth
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);
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.
Istnieje także atrybut '[Write (false)]'. Czy ktoś może powiedzieć jaka jest różnica między '[Computed]' a '[Write (false)]? – vaheeds
@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. –
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; }
}
Dla tych, którzy nie chcą, to DapperExtensions DatabaseGenerated
ze standardowej System.ComponentModel.DataAnnotations.Schema
mogą być również wykorzystywane.
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
To rozwiązanie nie działa z Dapper 1.50.2, na .NET CORE –
Za jaką operację CRUD? – Alex
Do wstawienia (osoba). osoba ma rodzaj wyliczonej własności. Które nie należą do bazy danych. –
Elisabeth
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ć. –