12

Ich versuche, eine DbContext für eine vorhandene Datenbankstruktur mit ASP.NET 5 und Entity Framework 7 zu generieren. Es ist nicht überraschend, gibt es nicht viel Dokumentation, wie dies leicht zu tun. Zusätzlich möchte ich NUR den Kontext aufbauen; Es gibt ~ 900 Tabellen und ich interessiere mich nur für ein paar von ihnen, ich brauche keine Modellklasse für jeden.Entity Framework 7 DbContext Scaffold

Ich habe die angegebenen Befehle here und here mit etwas Glück verwendet.

Also, ich glaube, ich habe zwei Fragen:

  1. Wo werden die erzeugten Kontextdateien befinden? Ich führe den Befehl in der Eingabeaufforderung ohne Fehler aus, aber sonst passiert nichts. Ich weiß, dass ich zumindest an der richtigen Stelle bin, da ich das alte EF6-Modell mit nicht unterstützten Eigenschaften hinzufügen kann, und es gibt mir einen Fehler, dass sie nicht unterstützt werden.

  2. Ist es möglich, nur einen Kontext ohne entsprechende Modellklassen zu generieren?

+0

Wenn Sie sagen, Sie mit diesen Befehlen „etwas Glück“ gehabt haben, was genau das Problem war? – DavidG

+0

@DavidG wenn ich den Befehl in der Eingabeaufforderung ausführen, bekomme ich nur kein Ergebnis. Kein Fehler, aber auch kein Erfolg. Meine Kontextdatei bleibt leer, und ich sehe keine andere zum Dateisystem hinzugefügt. – awh112

Antwort

-3

Ich würde Code-First aus einer vorhandenen Datenbank versuchen. Sie können Ihre Kontextklasse so erstellen, dass sie wie folgt aussieht:

public class MyDbContext : DbContext { 

     public MyDbContext() 
      : base("connectionString") { 
      Database.SetInitializer<MyDbContext>(null); 
     } 

     public virtual DbSet<Table1> Table1s { get; set; } 

     public virtual DbSet<Table2> Table2s { get; set; } 

     ... 
} 

Sie können DbSets nur für die Tabellen einschließen, die Sie benötigen. Sie erstellen die entsprechenden Modelle, die Sie benötigen (Tabelle 1, Tabelle 2 usw.), sowie die Gerüst-Controller und Ansichten aus diesen Modellen.

+0

Viel Glück dabei, wenn Sie 100 Tische modellieren müssen! – DavidG

+0

Danke für den Vorschlag! Das Problem damit scheint zu sein, dass die Datenbank, auf die Sie oben verweisen, System.Data ist, während ich Microsoft.Data verwende und das DatabaseFacade-Objekt, das aus dem Basiskontext verfügbar gemacht wird, nicht über die 'SetInitializer'-Methode verfügt. – awh112

+0

@DavidG Zum Glück muss ich nur ~ 5 Tabellen aus den vielen, die es gibt, modellieren! – awh112

0

Für EF 7 müssen Sie nicht mehr mit der Basis initialisieren, dies führt zu einem Compilerfehler. was Sie brauchen die Microsoft EF7 starting docs.

Sie wollen, wie es aussehen Aufmerksamkeit auf die neue

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     // Visual Studio 2015 | Use the LocalDb 12 instance created by Visual Studio 
     optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 

     // Visual Studio 2013 | Use the LocalDb 11 instance created by Visual Studio 
     // optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 

     // Visual Studio 2012 | Use the SQL Express instance created by Visual Studio 
     // optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 
    } 
12

Ich hatte das gleiche Problem mit meinem Projekt zahlen, um den Kontext und die Modelle zu erzeugen. Hier sind ein paar Dinge, die ich getan habe.

-Updates 1.0 RC1 unter

Project.json

"dependencies": { 
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", 
    "EntityFramework.Commands": "7.0.0-rc1-final", 
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final" 
    }, 

    "commands": { 
    "ef": "EntityFramework.Commands" 
    }, 

    "frameworks": { 
    "dnx451": { }, 
    "dnxcore50": { } 
    } 

DNX Befehl

dnx ef dbcontext scaffold "connectionString" EntityFramework.MicrosoftSqlServer 

Original-Beitrag unten

Achten Sie darauf, diese werden hinzugefügt, um Ihre project.json Datei:

"dependencies": { 
    "EntityFramework.SqlServer": "7.0.0-beta7", 
    "EntityFramework.Commands": "7.0.0-beta7", 
    "EntityFramework.SqlServer.Design": "7.0.0-beta7" 
}, 
"commands": { 
    "ef": "EntityFramework.Commands" 
} 

Upgrade-dnvm und die dnx Runtimes sowie dnvm update-Selbst und mit dnvm aktualisieren. Ich habe das in cmd ausgeführt.

Geöffnete cmd.exe im Projekt-Speicherort (wenn Sie in Windows sind, navigieren Sie zum Ordner und verschieben Sie + Rechtsklick in den Ordner und klicken Sie auf "Öffnen Sie das Befehlsfenster hier"). In meinem Fall hatte ich ein separates Projekt für meine Data Access Layer z.

C:\Projects\Stackoverflow Example\src\StackoverflowExample.DAL\ 

ich dann Simplay lief:

dnx ef DbContext Gerüst "Data Source = .; Initial Catalog = Datenbank; Integrated Security = True" EntityFramework.SqlServer

Stellen Sie sicher, dass Ihr Projekt erstellt werden kann. Wenn es Fehler gibt, werden die Befehle wahrscheinlich nicht funktionieren.

Es erzeugte alle Modelle sowie den Kontext (mit der OnModelCreating() - Einrichtung jeder Entität). Wenn Sie nicht alle Modelle benötigen, löschen Sie einfach diejenigen, die Sie nicht verwenden.

So beantworten Sie Fragen:

  1. Es schafft die Modelle und Kontext, in dem Ordner, in dem Sie in den dnx ef DbContext Gerüst lief
  2. Ich kann nicht alle Befehle sehen, dass Sie noch tun dies erlaubt. . Führen Sie dnx ef - help in cmd und schauen Sie selbst. dnx ef

Ich hoffe, das hilft.

+0

Gefolgt die gleichen Schritte, außer dass ich alle Pakete von der Kommandozeile mit "dnu" installieren musste, danke! – LeLong37

+0

Ihre DAL-Schicht ist ein Projekt welcher Art? Die meisten Projekttypen unterstützen keine project.json – pootzko

+1

@pootzko Ich habe eine Klassenbibliothek (Package) in Framework 4.6 verwendet. Referenzierte das in meiner BL, die auch eine Klassenbibliothek ist, und referenzierte die BL in meiner ASP.NET 5-Webanwendung. Die Aufteilung funktionierte für mich aufgrund der Komplexität meines Projekts, aber Sie können alles in einem Webanwendungsprojekt tatsächlich tun. –

3

Eine Option --table (-t) existiert für das Gerüst Befehl:

dnx ef dbcontext scaffold connectionstring provider -t dbo.tab1 -t dbo.tab2 
Verwandte Themen