Die neueste Version von EF Core ist derzeit 2.0.0-priview1-final
, daher geht es in diesem Artikel hauptsächlich um einige Anweisungen für diese Version.
Hinweis: Wenn Sie .NET Core 2.0 mit Visual Studio verwenden möchten, benötigen Sie mindestens die Vorschauversion von Visual Studio 2017 15.3.
Empfohlene verwandte MySQL-Video-Tutorials: „MySQL-Tutorial“
Sie können den folgenden Befehl verwenden um Ihre aktuelle Version von .NET Core zu installieren oder zu aktualisieren.
// 安装 PM> install-package Microsoft.EntityFrameworkCore.SqlServer -Pre -Version 2.0.0-preview1-final // 升级 PM> update-package Microsoft.EntityFrameworkCore.SqlServer -Pre -Version 2.0.0-preview1-final
Toolkit
// 直接修改 CSPROJ 文件 <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview1-final" /> </ItemGroup> // 或者通过以下命令 PM> update-package Microsoft.EntityFrameworkCore.Tools -Pre -Version 2.0.0-preview1-final
Vermeiden Sie die Erstellung unnötig notwendiger Unterabfragen
Einige Befehle wechseln zur Ausführung zum Client
Nur wenige Anfragen rufen alle Spalten der Tabelle ab
Etwas verwandelt eine einzelne LINQ-Abfrage in eine N+1-Abfrage ohne ordnungsgemäße Filterung.
EF.Functions-Eigenschaften in EF Core 2.0 hinzugefügt, EF Core Provider kann sie verwenden, um einige den Datenbankmethoden zugeordnete Funktionen anzupassen der letztgenannten Operatoren, damit sie in LINQ-Abfragen aufgerufen werden können. Zum Beispiel:
var aCustomers = from c in context.Customers where EF.Functions.Like(c.Name, "a%"); select c;
Was bedeutet es, Entitäten und Tabellen zu trennen? In der Vergangenheit wurde eine Datenbanktabelle einem Entitätsobjekt in EF zugeordnet, d. h. es bestand eine Eins-zu-eins-Entsprechung zwischen der Tabelle und der Entität. In Version 2.0 ist es dann zulässig, einige verwandte Entitäten einer Tabelle zuzuordnen, und EF verwaltet diese Instanzen oder Referenzbeziehungen.
modelBuilder.Entity<Customer>() .OwnsOne(c => c.WorkAddress);public class Customer { public int CustomerId { get; set; } public Address WorkAddress { get; set; } }public class Address { public string Line { get; set; } public string PostalOrZipCode { get; set; } public string StateOrProvince { get; set; } public string CityOrTown { get; internal set; } }
Beim Generieren von Datenbanktabellen werden Customer
und Address
in einer Tabelle generiert.
Hinweis: Diese Funktion in Privilege1 ist noch nicht vollständig.
Die neue Version führt eine Funktion namens „vertikale Filterung“ ein, die eine relativ häufige Anforderung ist.
Wenn wir das EF Core-Kontextmodell definieren, können wir beim Erstellen des Modells einige Filterbedingungen hinzufügen, z. B. das immer Herausfiltern einiger „logisch gelöschter“ Daten bei Abfragen.
public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } public int TenantId {get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Post>() .HasQueryFilter(p => !p.IsDeleted && p.TenantId == this.TenantId ); } }
Dieser Filter wird automatisch angewendet, wenn Typdaten über direkte Abfrage oder Navigationseigenschaften abgefragt werden (Include()
). Natürlich können Sie mit IgnoreQueryFilters()
diesen globalen Filter in der Abfrage deaktivieren.
Normalerweise erfordert die Verwendung von EF Core in ASP.NET Core einen angepassten DbContext, der dann in den Systemcontainer eingefügt und dann über den Konstruktor des aus dem Container abgerufen wird Controller. Holen Sie sich die Objektinstanz. Das bedeutet, dass bei jeder Anfrage eine neue Instanz erstellt wird.
In EF Core 2.0 wird eine neue Methode zum Einfügen eines benutzerdefinierten DbContext eingeführt, die explizit einen Instanzpool verwendet, um ihn in den Container einzufügen.services.AddDbContextPool<BloggingContext>( options => options.UseSqlServer(connectionString));
private static Func<CustomerContext, int, Customer> _customerById = EF.CompileQuery((CustomerContext db, int id) => db.Customers .Include(c => c.Address) .Single(c => c.Id == id)); ...using (var db = new CustomerContext()) { var customer = _customerById(db, 147); }
Das obige ist der detaillierte Inhalt vonNeue Funktionen von EF Core 2.0. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!