In EF6 können wir normalerweise die Entität auf diese Weise konfigurieren.
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);
}
}
Wie wir es in EF Core machen können, seitdem die Klasse I EntityTypeConfiguration erbt, die die Klasse nicht finden kann.
Ich lade den EF Core-Rohquellcode vom GitHub herunter und kann ihn nicht finden. Kann jemand dabei helfen?
c#
entity-framework-core
Ihr Mann
quelle
quelle
IEntityTypeConfiguration<T>
mit einervoid Configure()
Methode , die Sie umsetzen können. Details hier: github.com/aspnet/EntityFramework/pull/6989Antworten:
Seit EF Core 2.0 gibt es
IEntityTypeConfiguration<TEntity>
. Sie können es so verwenden:Weitere Informationen zu dieser und anderen in 2.0 eingeführten neuen Funktionen finden Sie hier .
quelle
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
werden alle benutzerdefinierten Konfigurationen angewendetSie können dies durch einige einfache zusätzliche Typen erreichen:
Verwendung:
quelle
ForSqlServerToTable()
?ToTable
, siehe docs.microsoft.com/en-us/ef/core/modeling/relational/tablesentity.Property(c => c.JoinDate).HasColumnType("date");
OnModelCreating
wurde aktualisiert, um a zu erfordernDbModelBuilder
. Der Weg, um Konfigurationen hinzuzufügen, ist jetztmodelBuilder.Configurations.Add(new UserConfiguration());
In EF7 überschreiben Sie OnModelCreating für die von Ihnen implementierte DbContext-Klasse.
quelle
IEntityMapperStrategy
Schnittstelle mit einervoid MapEntity(ModelBuilder, Type)
Signatur undbool IsFor(Type)
. Implementieren Sie die Schnittstelle so oft oder so oft Sie möchten (damit Sie Klassen erstellen können, die mehr als eine Entität zuordnen können, wenn Sie möchten), und erstellen Sie dann eine andere Klasse (einen Strategieanbieter), die eineIEnumerable
der gesamten Klassen einfügtIEntityMapperStrategies
. Siehe hier unter "Spezielle Typen". Fügen Sie das in Ihren Kontext ein.Dies verwendet die neueste Version, Beta 8. Versuchen Sie Folgendes:
Dann in Ihrem DbContext:
quelle
Sie können Reflection verwenden, um Dinge sehr ähnlich wie in EF6 zu tun, mit einer separaten Zuordnungsklasse für jede Entität. Dies funktioniert in RC1 final:
Erstellen Sie zunächst eine Schnittstelle für Ihre Zuordnungstypen:
Erstellen Sie dann eine Zuordnungsklasse für jede Ihrer Entitäten, z. B. für eine
Person
Klasse:Nun ist die Reflexionsmagie
OnModelCreating
in IhrerDbContext
Implementierung:quelle
DataContext
und.Where
? Ich habe dafür ein separates Projekt gemacht und scheine die Referenz nicht zu finden..Where
istSystem.Linq
,DataContext
ist die Klasse, in der der Code hinzugefügt wird (mein EFDbContext
impl)Seit EF Core 2.2 können Sie alle Konfigurationen (Klassen, die die IEntityTypeConfiguration-Schnittstelle implementiert haben) in einer Zeile in der Methode OnModelCreating in class hinzufügen, die von der DbContext-Klasse geerbt wird
Und wie in der vorherigen Antwort erwähnt, können Sie seit EF Core 2.0 die Schnittstelle IEntityTypeConfiguration implementieren und die Zuordnungskonfiguration mithilfe der FluentAPI in Configure-Methode einrichten.
quelle
Dies ist, was ich in einem Projekt mache, an dem ich gerade arbeite.
Verwendung:
In der OnModelCreating-Methode Ihres Kontexts:
Beispiel für eine Zuordnungsklasse:
Eine andere Sache, die ich gerne mache, um das Faltverhalten von Visual Studio 2015 zu nutzen, ist für eine Entität namens "Benutzer". Sie nennen Ihre Zuordnungsdatei "User.Mapping.cs". Visual Studio faltet die Datei im Lösungs-Explorer so dass es unter der Entitätsklassendatei enthalten ist.
quelle
Configure(builder)
2016 nicht vorhanden? Bei einer geringfügigen Änderung der Verkabelung, um auf TypeConfiguration zu verweisen, ist die zusätzliche Schnittstelle nicht erforderlich.Ich endete mit dieser Lösung:
Beispielverwendung:
und
quelle
Implementieren Sie einfach die IEntityTypeConfiguration
und fügen Sie es dann Ihrem Entitätskontext hinzu
quelle
In ef core müssen wir IEntityTypeConfiguration anstelle von EntityTypeConfiguration impelementieren. In diesem Fall haben wir vollen Zugriff auf DbContext modelBuilder und können eine fließende API verwenden. In ef core unterscheidet sich diese API jedoch geringfügig von früheren Versionen. Weitere Informationen zur Konfiguration des ef-Kernmodells finden Sie unter
https://www.learnentityframeworkcore.com/configuration/fluent-api
quelle
In Entity Framework Core 2.0:
Ich nahm Cocowallas Antwort und passte sie für v2.0 an:
Und es wird im DbContext folgendermaßen verwendet:
Und so erstellen Sie eine Entitätstypkonfiguration für eine Entität:
quelle
Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.
class EntityTypeConfigurationBase<TEntity> : IEntityTypeConfiguration<TEntity>
). Sie können keine Instanz dieser Basisklasse erstellen.Habe ich recht?
Ich kann config übergeben:
quelle
Ich verfolgte einen ähnlichen Ansatz wie Microsoft ForSqlServerToTable implementiert hat
mit Erweiterungsmethode ...
der Teil- Flag ist erforderlich , wenn Sie die gleichen Klassennamen in mehreren Dateien verwenden mögen
Dann rufen Sie im DataContext OnModelCreating für jede Nebenstelle an ...
Auf diese Weise folgen wir demselben Muster, das auch von den anderen Builder-Methoden verwendet wird.
Was machst du?
quelle
Hier ist das Problem für die Verbesserung des EF7 Github-Repos: https://github.com/aspnet/EntityFramework/issues/2805
Sie können das Problem direkt dort verfolgen, obwohl es sich immer noch nur im Rückstand ohne festgelegte Priorität befindet.
quelle
Ich habe ein Projekt, mit dem Sie Entitäten außerhalb von
DbContext.OnModelCreating
konfigurieren können. Sie konfigurieren jede Entität in einer separaten Klasse, von der erbtStaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration
Zuerst müssen Sie eine Klasse , die erbt von erstellen ,
StaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration<TEntity>
woTEntity
ist die Klasse , die Sie konfigurieren möchten.Dann müssen Sie in Ihrer Startup-Klasse Entity Framework nur mitteilen, wo sich alle Konfigurationsklassen befinden, wenn Sie Ihren DbContext konfigurieren.
Es gibt auch eine Option zum Hinzufügen von Typkonfigurationen über einen Anbieter. Das Repo enthält eine vollständige Dokumentation zur Verwendung.
https://github.com/john-t-white/StaticDotNet.EntityFrameworkCore.ModelConfiguration
quelle