W EF6 zwykle możemy użyć tego sposobu do skonfigurowania Entity.
public class AccountMap : EntityTypeConfiguration<Account>
{
public AccountMap()
{
ToTable("Account");
HasKey(a => a.Id);
Property(a => a.Username).HasMaxLength(50);
Property(a => a.Email).HasMaxLength(255);
Property(a => a.Name).HasMaxLength(255);
}
}
Jak możemy to zrobić w EF Core, od kiedy klasa I Inherit EntityTypeConfiguration, która nie może znaleźć klasy.
Pobieram surowy kod źródłowy EF Core z GitHub, nie mogę go znaleźć. Czy ktoś może w tym pomóc?
c#
entity-framework-core
Hermana
źródło
źródło
IEntityTypeConfiguration<T>
jednavoid Configure()
metoda, którą można wdrożyć. Szczegóły tutaj: github.com/aspnet/EntityFramework/pull/6989Odpowiedzi:
Ponieważ EF Core 2,0 istnieje
IEntityTypeConfiguration<TEntity>
. Możesz go używać w ten sposób:Więcej informacji na temat tej i innych nowych funkcji wprowadzonych w wersji 2.0 można znaleźć tutaj .
źródło
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
ją, zastosuje wszystkie niestandardowe potwierdzeniaMożesz to osiągnąć za pomocą kilku prostych dodatkowych typów:
Stosowanie:
źródło
ForSqlServerToTable()
?ToTable
, zobacz docs.microsoft.com/en-us/ef/core/modeling/relational/tablesentity.Property(c => c.JoinDate).HasColumnType("date");
OnModelCreating
został zaktualizowany, aby wymagaćDbModelBuilder
. Sposób na dodanie do tego konfiguracji jest terazmodelBuilder.Configurations.Add(new UserConfiguration());
W EF7 przesłaniasz OnModelCreating w implementowanej klasie DbContext.
źródło
IEntityMapperStrategy
interfejs zvoid MapEntity(ModelBuilder, Type)
podpisem ibool IsFor(Type)
. Zaimplementuj interfejs tyle razy, ile chcesz (aby można było tworzyć klasy, które mogą mapować więcej niż jedną jednostkę, jeśli chcesz), a następnie utwórz kolejną klasę (dostawcę strategii), która wstrzykujeIEnumerable
wszystkie klasyIEntityMapperStrategies
. Zobacz tutaj w sekcji „Typy specjalne”. Wstrzyknij to w swoim kontekście.Używana jest najnowsza wersja beta 8. Spróbuj tego:
Następnie w swoim DbContext:
źródło
Za pomocą odbicia można wykonywać czynności bardzo podobne do ich działania w EF6, z osobną klasą mapowania dla każdej jednostki. Działa to w finale RC1:
Najpierw utwórz interfejs dla swoich typów mapowania:
Następnie utwórz klasę mapowania dla każdej z twoich encji, np. Dla
Person
klasy:Teraz magia odbicia
OnModelCreating
w twojejDbContext
implementacji:źródło
DataContext
i.Where
używa? Zrobiłem dla tego osobny projekt i nie wydaje mi się, aby znaleźć odniesienie..Where
isSystem.Linq
,DataContext
to klasa, w której kod jest dodawany (my EFDbContext
impl)Od EF Core 2.2 można dodać wszystkie konfiguracje (klasy, które zaimplementowały interfejs IEntityTypeConfiguration) w jednym wierszu w metodzie OnModelCreating w klasie, która jest dziedziczona z klasy DbContext
I, jak wspomniano w poprzedniej odpowiedzi, od EF Core 2.0 można zaimplementować interfejs IEntityTypeConfiguration, skonfigurować konfigurację mapowania za pomocą FluentAPI w metodzie Configure.
źródło
To właśnie robię w projekcie, nad którym obecnie pracuję.
Stosowanie:
W metodzie OnModelCreating Twojego Context:
Przykładowa klasa mapowania:
Inną rzeczą, którą lubię robić, aby skorzystać z zachowania zwijania programu Visual Studio 2015, jest dla jednostki o nazwie „Użytkownik”, nazywasz plik mapowania „User.Mapping.cs”, a program Visual Studio zwinie plik w eksploratorze rozwiązań tak, że jest zawarty w pliku klasy jednostki.
źródło
Configure(builder)
nie istniał w 2016 roku? Dzięki niewielkiej zmianie okablowania, aby wskazywało na TypeConfiguration, nie ma potrzeby stosowania „dodatkowego” interfejsu.Skończyłem na tym rozwiązaniu:
Przykładowe zastosowanie:
i
źródło
Po prostu zaimplementuj IEntityTypeConfiguration
a następnie dodaj go do kontekstu encji
źródło
W ef core musimy zaimplementować IEntityTypeConfiguration zamiast EntityTypeConfiguration w tym przypadku mamy pełny dostęp do DbContext modelBuilder i możemy używać płynnego API, ale w ef core ten interfejs jest trochę inny niż poprzednie wersje. Więcej szczegółów na temat konfiguracji modelu EF można znaleźć na stronie
https://www.learnentityframeworkcore.com/configuration/fluent-api
źródło
W Entity Framework Core 2.0:
Wziąłem odpowiedź Cocowalli i dostosowałem ją do wersji 2.0:
I jest używany w DbContext w następujący sposób:
W ten sposób tworzysz konfigurację typu jednostki dla jednostki:
źródło
Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.
class EntityTypeConfigurationBase<TEntity> : IEntityTypeConfiguration<TEntity>
). Nie możesz utworzyć instancji tej klasy bazowej.Czy mam rację?
Mogę przekazać konfigurację:
źródło
Podążyłem podobnie do sposobu, w jaki Microsoft zaimplementował ForSqlServerToTable
przy użyciu metody rozszerzenia ...
częściowy flaga jest wymagana, jeśli chcesz używać tej samej nazwy klasy w wielu plikach
Następnie w DataContext OnModelCreating wykonaj wywołanie dla każdego rozszerzenia ...
W ten sposób postępujemy według tego samego wzorca używanego przez inne metody konstruktora.
O co ci chodzi?
źródło
Cóż, tutaj jest problem dotyczący ulepszenia repozytorium EF7 Github: https://github.com/aspnet/EntityFramework/issues/2805
Możesz śledzić problem bezpośrednio tam, chociaż nadal znajduje się on tylko w zaległościach bez wyznaczonego priorytetu.
źródło
Mam projekt, który umożliwia konfigurowanie jednostek poza
DbContext.OnModelCreating
konfiguracją każdej jednostki w osobnej klasie, która dziedziczy poStaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration
Najpierw musisz utworzyć klasę, która dziedziczy po tym,
StaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration<TEntity>
skądTEntity
jest klasa, którą chcesz skonfigurować.Następnie w klasie Startup wystarczy wskazać Entity Framework, gdzie znaleźć wszystkie klasy konfiguracji podczas konfigurowania DbContext.
Istnieje również możliwość dodania konfiguracji typu za pomocą dostawcy. Repozytorium ma pełną dokumentację dotyczącą korzystania z niego.
https://github.com/john-t-white/StaticDotNet.EntityFrameworkCore.ModelConfiguration
źródło