@budyn: ogólnie też już od jakiegoś czasu nie używam repo. Zwłaszcza że ef da się testować. Natomiast trochę nie do końca mi odpowiada traktowanie obiektów domenowych jako modeli do zapisu, bo przy skopanym schemacie, na który nie ma się wpływu traktowanie obiektów domenowych jako modeli do zapisu powoduje, że te obiekty nie będą wyglądać tak jak powinny - biznesowo - tylko będzie w nich dużo kombinacji żeby orm dane zapisał.
Gdzie jest namespace tego Inflectora, bo mnie zaraz #!$%@?.

https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#pluralization-hook-for-dbcontext-scaffolding

public class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
{
services.AddSingleton();
}
}

public class MyPluralizer : IPluralizer
{
public string Pluralize(string name)
{
return Inflector.Inflector.Pluralize(name) ?? name;
}

public string Singularize(string name)
{
return Inflector.Inflector.Singularize(name) ?? name;
}
}

EF Core 2.1.

#programowanie #dotnet #entityframework
Jakie macie metody mapowania obiektów domenowych na obiekty, z których korzysta Entity Framework?
Używanie bezpośrednio obiektów z DbContext może i jest wygodne, ale w przypadku podpinania nowego softu do istniejacego schematu bazy danych(który np. jest skopany i nie ma możliwości jego zmiany), może nieźle popsuć sens od strony logiki biznesowej.

#programowanie #csharp #entityframework
@pepepanpatryk: Automapper ma metode rozszerzająca do query na db context, szukaj w Google jak sie używa(nazywa się jakoś ProjectTo czy jakoś tak i przy select jest fajna opcja bo pobiera tylko to co potrzebujesz z bazy.
Szukam jakiegoś pokazowego kodu źródłowego (jakiegoś rozbudowanego dema) z implementowaną bazą danych( #entityframework ) , dobrymi wzorcami itp. Tak aby przeanazliwać sobie kod i rozwiązania, czasami mam chwilę w pracy i przeglądnął bym sobie cudze i ciekawe projekty.

Ma ktoś propozycje lub jakieś projekty z gita które są warte uwagi i dobrze napisane? (Hindusi i jakieś projekty do tutorialów odpadają)

#naukaprogramowania #csharp #programowanie a może jakiś opensource projekt #programista15k
@hauhauu: @spetz: uuuuuu antyentityframeworkizm.

Możecie podać przykłady w czym EF Core czy EF6 odstaje od Dappera lub ADO.NET?
A jeżeli chodzi o wydajność to są jakieś rzetelne porównania?

Mi w EF Core brakuje "Inheritance: Table per concrete class (TPC)" ale po za tym to wszystkie inne braki dało się w prosty sposób obejść.
Kurde, nie wiem, czy czegoś nie umiem, czy to po prostu nie działa w taki sposób..
Mam dwie encje: Page i Layout - kod mniej więcej taki jak poniżej:

public class Layout
{
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public string Body { get; set; }
public virtual ICollection Pages { get; set; }
}

public class Page
{
[Key]
public Guid Id
Mireczki, pracuje wlasnie nad aplikacja typu multi tenant.
Teraz robie izolacje danych i poki co mam dwie rzeczy - filtrowanie rekordow po TenantId aktualnego user'a wiec nie ma szans zeby przypadkiem pozwolic na odczyt danych uzytkownikow.
Mam tez nadpisywanie TenantId podczas zapisu do bazy.

Pytanie czy to wystarcza? patrzylem na pare blogow o tym i wszyscy tylko to robia, ale co jesli user w jakis sposob by wyslal (majac legitny klucz do
Cześć mirki zastanawiam się trochę na koncepcją używania Commands/Queries zamiast tradycyjnego repozytorium.
W zasadzie trafiłem na post Jimmy-ego Bogard-a, gdzie proponował podobne rozwiązanie zamiast stosowania repozytorium.

Moja interpretacja tego co on tam napisał, wygląda mniej więcej tak:

Interfejs dla queries

public interface IQueryHandler
where TResult: class
where TArg: class
{
TResult Execute(TArg query);
}

Przykładowa implementacja:

public class TreesTransQuery : IQueryHandler, TreeTransQuery>
{
private readonly DatabaseContext _context;
public TreesTransQuery(DatabaseContext context)
{
_context
@pepepanpatryk: Wydaje mi się, że można to zrobić jeszcze bardziej generycznie, korzystając z _context.Set i ograniczyć użycie dodatkowych jeszcze obiektów dla każdego zapytania, jeżeli będzie ono np. takie samo dla wielu różnych encji :>
@pepepanpatryk: Przewaga Query nad Repo jest taka, że możesz w bazowej klasie zaimplementować logikię, która będzie wykonywana przed/po głównej metodzie(Execute). Czyli np. możesz tam sprawdzić uprawnienia, logować coś itd. Za to przy Repo będzie mniej kodu.
Proste zlecenie prosty projekt - korzystaj z ORM i Entity Framework i CodeFirst

1. Stwórz bazę,
2. Zrób 80% projektu
3. pokazujemy projekt
4. Ok Tylko dodaj jeszcze możliwość przechowywania kilku informacji
5. No problem, kilka tabel więcej
6. I się zaczęło

Entity nie tworzy nowych tabel, chociaż uwzględnia ich w dodawanych migracjach. Faza: nic nie wiem - Szukasz poradnika / solucji / wathever...

I wszyscy na jedną modłę prosty przykład dodawania
Też macie w ef core problem z dodaniem paru obiektów metodą Add lub AddRange, a następnie zapisaniem tego SaveChanges? Trafiłem ostatnio na taki błąd i wszystko muszę dodawać i zapisywać pojedyńczo .
Poleci ktoś jakiś fajny tutorial/opis/artykuł, jak można stworzyć end-to-end appkę w .NET Core z wykorzystaniem EF Core i Angulara 2? Coś, co pozwoli mi wejść w generalnie proces tworzenia takich aplikacji. Wiem, że mogę uczyć się wszystkiego osobno, ale chciałbym od razu być świadomym integracji tych trzech "stworzeń".

@PhoenixSoul: Autor mówi o tym, żeby nie używać transakcji, bo przecież zwykłe zapytania są atomowe.
Co powinno być w miarę oczywiste dla wszystkich.

Nie przedstawia alternatywy dla sytuacji, w której potrzebujemy zgrupować kilka akcji naraz i wykonać je w jednej transakcji (a jak ktoś mu to wypomina w komentarzu, to broni się, że i tak nie powinno się tak projektować aplikacji).

W dodatku używa TransactionScope, a są lepsze metody:
context.Database.BeginTransaction() albo
@PhoenixSoul: Autor chyba nie do końca rozumie jak działa context w entity frameworku. Przy zapisie i tak zostanie w bazie utworzona transakcja, jeśli nie zostanie wykryta "ambient transaction". Tak jak wspomniał @MaaV TransactionScope przy EF używa się do transakcji rozproszonych lub jak np potrzebujesz wyciągnąć ID nowo zapisanego wiersza w aktualnej transakcji. Ciekawostka: dzięki IEnlistmentNotification możemy zgłosić własny kod, który ma być obsłużony przez TransactionScope.
#programowanie #dotnet #orm #entityframework
Mireczki mam taką sytuację, że posiadam użytkownika który posiada własne zamówienia (relacja nr.1) i może oglądać zamówienia swoich podopiecznych (relacja 2). Teraz chciałbym użytkownikowi wyświetlić dane z obu relacji w jednym widoku. Teraz jak do tego podejść. Pobrać z bazy danych obiekt użytkownika z dołączonymi obiema listami. (mam na myśli Include z ef, albo fetch z hibernate) i potem przemapować na jakiś view model czy może napisać jakieś
Mirki, taki pytanko
Mam projekt mam w MVC/EF który ma działać pod dwoma bazany danych równolegle. Pierwsza jest już stworzona, druga będzie generowana z podejścia CodeFirst. Pierwsza jest główna, istnieją w niej praktycznie wszystkie dane. Druga będzie raczej pomocnicza, będą w niej tabele z użytkownikami i tabele łącząca użytkowników i wybrane tabele z bazy głównej (w relacji 1 do wielu) tak, żeby każdy user widział określone rekordy z bazy drugiej i tylko
select Model from __migrationHistory
Nigdy nie zdawałem sobie sprawy że numery w migracjach sa lokowane w tak gigantycznej przestrzeni

81853 znaki

#numery #entityframework #asp.net #dotnet

0x1F8B0800000000000400ECBDDB6E1CB9B228F83EC0FC83E1A799837DDA2DF75A1B6B2F74CF81244BB6B02D5B4B25DB7B9D97422A8B9272392BB33A2FB2D407F365F3309F34BF3024F3C6248377665695BAD040BB940C06C96030180C0623FEBFFFE7FFFDF57F3CADD3578FA828933CFBEDF5D14F3FBF7E85B2385F25D9FD6FAFEBEAEEBFFFEDF5FFF8BFFEF7FFEDD7B3D5FAE9D5D70EEE1702876B66E56FAF1FAA6AF3F7376FCAF801ADA3F2A77512177999DF553FC5F9FA4DB4CADFBCFDF9E7FF787374F4066114AF31AE57AF7EBDAEB32A5923FA07FEF334CF62B4A9EA28BDCC57282DDBEFB86441B1BEFA14AD51B98962F4DBEBD3BCC44D7C8C6E7F7A17A5AF5F1DA749843BB140E9DDEB575196E55554E12EFEFD4B8916559167F78B0DFE10A537CF1B84E1EEA2B4446DD7FF3E809B8EE2E7B764146F868A1DAAB82EAB7C6D89F0E897962C6FF8EA4EC47DDD930D13EE0C13B87A26A3A6C4FBEDF5719C5EA3382F56AF5FF1ADFDFD342D08244BDC66227EEA6BFDDB2BBEECDF7A76C05C43FEC320755AD505FA2D43755544E9BFBDBAAA6FD324FE4FF47C937F47D96F599DA66C2F713F71D9E803FE7455E41B5454CFD7E8AEEDFB05EEF49B71BD377CC5BE1A53A719D44556FDF2F6F5AB4FB8F1E836453D13300458547981DEA30C15518556575155A12223381025A3D03AD756436C7D8B2658C8EF0E0FE660BC0E5FBFBA8C9E3EA2ECBE7AF8EDF55F7EC62BEF3C7942ABEE4B8BFB4B96E0658B2B55458DACDB3EA52C818AEB3C45D6E3F8143D26F794900AACAF5F5DA39402950FC9A659B13FB100CB9ED74A3CC2225F938F631C0CC8F2262AEE51857B9AABE116795DC45C9F7F7D332C0FE5A2190FC062DDB0150F4B47D19686DDDFFEF5AF53B0FB7981D002B3E186B6D7B47E92E3B98A326B5C37D1D3D9135A6F2A5F44C771953C225F2C17E5E2B9ACD0BA61593F5C0DA64053A46EEA0AAFD287A844AB6F49F580CB56755C851344AC68092B863AF1A213439DB8B2159DEA0E2FD9E6C0FE8E21A45293038384A6AAB757A858272591682A32F350F2DEAB21855168C06D477393A0E2AA486264C02D2CAC845B061035B7307010B7586F5A4E1BD661B332D092DED749DF6AF3DB52B0E2D34991A9C5EAD1CF869A9E46A95C47493A7D33575159FEA0870B694BF867C086CEF3621DD9EF10126C8B28AD26EFFAF16A9D64A7F97A8D996DF2C62ECA707AC9DD5D824FD995FDC18043F41565ABBCF0C5F2212A170F3955DD4EA3A2BAC01A4AB91BAAD73B94222C56426970C7719CD799F7F4192971A6C74A75531FA3B2BAD81CAF56052ACBC959FCB440448A7FCEBE5471D7D83BFCE52659DB9F0848D73FE6F74946308008F5F52917E16D448AC2B24F27499A62D2B5F45C0A0B4733EFEDF9C6B4BA42796E8685C9032B440CC072503E066D082A17743810C85673EB590FEA654B0746B366BAC8178AFD13201C3B7764D6BB2365F78EF4FD3B72EDA046ED5D3260C079A32F952ABB0C88EDA9E8248ABF5F64588B8BBF2FEADB322E920DED25D8610930C8A23A5881DCDA0AB6C43F49F3FB5639900C6700808700948BDD86806CBBCA1DDB429E4FA53C031F004D7B7CF64414FD283DAEAB07A2EAC71448755655D500C96F5441980FB35AB6138495E37A5D2EAFF2B2524FCF0810981CA65C3E352C90EDC474758BE411EF9297582A44F76A53F1525245D1FB11A47E1C63F020238265BEBAE523F3311D590EEAC87554ACA8331AD2B8827C3C2319AA1BCC08D8712437F926898D86D042CAFB4E01B49D6EA06C7B2BD5B97AF40D04D03B5220EF152DB5EDCD27F4A354EE510C002824A17241268240B622F073B192194F6911D8BD7189D031AED8DA489AA7E9D7BCC22AB9D248C