2017-02-14 4 views
0

gerade erst begonnen EF und Datenbanken Lernen im Allgemeinen, also habe ich diese kurze Anleitung verfolgt: http://www.entityframeworktutorial.net/code-first/simple-code-first-example.aspxDatenbank nicht erstellt werden, wenn Projekt gestartet wird

Ich machte es mit seinem Beispiel arbeiten, aber wenn ich versuche, mit meinem eigene Klassen und so, es wird keine Datenbank erstellt (oder zumindest finde ich sie nirgendwo im Objekt-Explorer), und ich hoffe, du könntest mir sagen, warum?

Ich weiß, dass ich keine Verbindungszeichenfolge im base() - Teil der Kontextklasse deklariert habe, aber im Beispiel aus dem Tutorial tut er das auch nicht, also sollte das nicht das Problem sein, denke ich? Vielen Dank im Voraus :)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ShopEntity 
{ 
    class Product 
    { 
     public int ProductId { get; set; } 
     public int Price { get; set; } 
     public string ProductName { get; set; } 


    } 
} 


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace ShopEntity 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      using (var ctx = new ShopContext()) 
      { 
       User adminUser = new User() 
       { 
        Address = "Skejby Vænge 96A", 
        EMailAddress = "[email protected]", 
        IsAdmin = 1, 
        PassWord = "12345678", 
        UserName = "Anders1234" 
       }; 
       //Product Apple = new Product() { Price = 2, ProductName = "Apple" }; 
       //Product Melon = new Product() { Price = 10, ProductName = "Melon" }; 
       //Product Beef = new Product() { Price = 40, ProductName = "Beef" }; 
       ctx.Users.Add(adminUser); 
       //ctx.Products.Add(Apple); 
       //ctx.Products.Add(Melon); 
       //ctx.Products.Add(Beef); 
       ctx.SaveChanges(); 

      } 




       Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ShopEntity 
{ 
    class ShopContext: DbContext 
    { 
     public ShopContext() : base() 
     { 

     } 

     public DbSet<User> Users { get; set; } 

     public DbSet<Product> Products { get; set; } 


    } 
} 

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ShopEntity 
{ 
    class User 
    { 

     public int UserId { get; set; } 

     [MaxLength(20)] 
     public string UserName { get; set; } 

     [MaxLength(20)] 
     public string PassWord { get; set; } 
     public string EMailAddress { get; set; } 

     [MaxLength(50)] 
     public string Address { get; set; } 
     public byte IsAdmin { get; set; } 

    } 
} 

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
</configuration> 
+2

Ist Ihre Verbindungszeichenfolge in Ihrer 'app.config' definiert? –

+0

Zwei Sekunden, werde die app.config zum Beitrag hinzufügen - sollte jetzt da sein :) – sunero4

+1

siehe meine Antwort .. es gibt ein paar Dinge, die Sie tun müssen –

Antwort

1

bin ich nicht sicher, warum in dem Beispiel, das er nicht die Verbindungszeichenfolge in den Basiskonstruktor nicht passieren, aber das benötigt wird, um DbContext zu sagen, welche Datenbank zu verbinden. Der folgende Link ist in dem von Ihnen verwendeten Beispiel.

http://www.entityframeworktutorial.net/EntityFramework4.3/dbcontext-vs-objectcontext.aspx

+0

Ich habe versucht, es auf diese Weise hinzuzufügen: public ShopContext(): base ("name = ShopDBEntity") Aber jetzt bekomme ich eine Ausnahme: Eine nicht behandelte Ausnahme vom Typ 'System.InvalidOperationException' ist in EntityFramework.dll aufgetreten Weitere Informationen: Keine Verbindungszeichenfolge mit dem Namen 'ShopDBEntity' gefunden werden konnte die Anwendungskonfigurationsdatei. – sunero4

+1

siehe meine Antwort für die * komplette * Lösung –

1

Es sieht nicht wie Sie eine Verbindungszeichenfolge überall in Ihrer Anwendung definiert haben. Sie müssen die Verbindung in app.config definieren und dann in Ihrer Kontextklasse darauf verweisen.

app.config

Sie müssen die Verbindungszeichenfolge ändern, um Ihre Bedürfnisse auf der Grundlage des DB-Name und Authentifizierungsoptionen zu erfüllen.

<configuration> 
    <connectionStrings> 
     <add name="myConnection" connectionString="SERVER=myServer;Integrated Security=SSPI;Initial Catalog=myDB"/> 
    </connectionString> 
    </configuration> 

DB Kontext

Der Name der Verbindung in Ihrem app.config Bedürfnisse bestanden in die base DbContext` Klassendefinition werden.

class ShopContext: DbContext 
     { 
      public ShopContext() : base("myConnection") 
      { 

      } 

      public DbSet<User> Users { get; set; } 
      public DbSet<Product> Products { get; set; } 

     } 
+0

Danke, das macht ein paar Dinge klar - immer noch verwirrt wie es geschafft hat, eine Datenbank zu erstellen, wenn ich es mit seinem Beispiel gemacht habe, aber das ist irrelevant, denke ich :) Im Moment Ich verbinde mich nicht mit irgendeinem Server, benutze nur die lokale Datenbank, also was soll ich in den SERVER = myServer Teil deiner Antwort schreiben? – sunero4

+0

Wenn Sie sql Server lokale db verwenden, wird der Server: '(LocalDB) \ MSSQLLocalDB' oder' (LocalDB) \ v .0' (wenn eine ältere Version läuft) –

+0

Vielen Dank - leider bin ich Wenn ich von einer anderen Ausnahme betroffen bin, habe ich etwas mit all meinen früheren Versuchen vermasselt, die Datenbank zu erstellen. Eine nicht behandelte Ausnahme des Typs 'System.TypeInitializationException' ist in EntityFramework.dll aufgetreten. Weitere Informationen: Typeinitialiseringsfunktionen für 'System .Data.Entity.Internal.AppConfig 'hat eine Ausnahme ausgelöst. – sunero4

1

Die Datenbank wird erstellt in Ordnung, aber das Dümmste, was niemand nie in Fällen wie diese erwähnen ist, dass die Datenbank in Ihrem Windows-Profil-Verzeichnis/Ordner erstellt wird. In diesem Beispiel wird der Standardspeicherort in einer Art von Entity Framework-Standard und unsichtbarer Verbindungszeichenfolge (eine Factory-Funktion) verwendet. Werfen Sie einen Blick in c: \ Benutzer [yourmachineloginname] und beachten Sie, dass es eine Datenbank mit dem Präfix ConsoleApplication oder mit dem Präfix ShopEntity in Ihrem Fall gibt. Um diese Datenbank an einen anderen Ort zu bringen, müssen Sie eine spezifische Verbindungszeichenfolge erstellen. diese

Um eine spesific Verbindungszeichenfolge zu machen, tun:

0) Entfernen Sie die Datenbank-Datei in Ihrem Windows-Profil-Ordner

1) In Ihrem Projektordner

erstellt einen Ordner machen namens App_Data

2) setze diese Verbindungszeichenfolge in die Datei app.config:

<connectionStrings> 
    <add name="myConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFileName=C:\projects\sabemos\ConsoleApplication1\ConsoleApplication1\App_Data\DatabaseFileName.mdf;Integrated Security=True;MultipleActiveResultSets=True" /> 
    </connectionStrings> 

4) Vergiss nicht, den Pfad zu ändern (c: \ projects ...) In der Verbindungszeichenfolge an die eine, die

5) Sicherstellen, dass der Connectionname auf den Namen Ihrer Datenbankdatei führt Sie in Ihrer DbContext Basis Initialisierung Inzwischen

Sie die Datenbank Pop up sollte verwenden entspricht im Ordner App_Data in Ihrem Projektordner

+0

Ich kann das nicht wirklich finden, aber ich kann das sehen, das ich gemacht habe, als ich das Beispiel aus dem Tutorial benutzt habe - aber trotzdem danke! – sunero4

+0

Wo haben Sie die Datenbank dann gefunden? – netfed

+0

Bis jetzt kann ich nirgendwo finden, dass die Datenbank von diesem Projekt erstellt wurde, ich kann nur die finden, die erstellt wurde, als ich seinem Tutorial gefolgt bin und die Schuldatenbank erstellt habe, und das war wo du gesagt hast :) – sunero4

Verwandte Themen