2017-12-11 4 views
11

Ich versuche linq2db und MySQL zu verwenden, um meine Datenbank zu verbinden, so, ich habe eine einfache Verbindung wie so:Fehler bei der Verbindung zur Datenbank mit Linq

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using LinqToDB; 
using LinqToDB.Configuration; 
using LinqToDB.DataProvider; 
using MySql.Data.MySqlClient; 
using twitter.Properties; 
using DataModels; 

namespace twitter.classes 
{ 
    class core 
    { 
     public static string DatabaseHost 
     { 
      get { return Settings.Default["databasehost"].ToString(); } 
      set { Settings.Default["databasehost"] = value; } 
     } 

     public static string DatabaseUser 
     { 
      get { return Settings.Default["databaseuser"].ToString(); } 
      set { Settings.Default["databaseuser"] = value; } 
     } 

     public static string DatabaseName 
     { 
      get { return Settings.Default["databasename"].ToString(); } 
      set { Settings.Default["databasename"] = value; } 
     } 

     public static string DatabasePassword 
     { 
      get { return Settings.Default["databasepass"].ToString(); } 
      set { Settings.Default["databasepass"] = value; } 
     } 

     public class ConnectionStringSettings : IConnectionStringSettings 
     { 
      public string ConnectionString { get; set; } 
      public string Name { get; set; } 
      public string ProviderName { get; set; } 
      public bool IsGlobal => false; 
     } 

     public class MySettings : ILinqToDBSettings 
     { 
      public IEnumerable<IDataProviderSettings> DataProviders 
      { 
       get { yield break; } 
      } 

      public string DefaultConfiguration => "Twitters"; // lets set your configuration as default, so you can call just new DataContext() or new DataConnection() 
      public string DefaultDataProvider => ProviderName.MySql; // and set default database type 

      private static IDataProvider GetDataProvider() 
      { 
       return new LinqToDB.DataProvider.MySql.MySqlDataProvider(); 
      } 

      public IEnumerable<IConnectionStringSettings> ConnectionStrings 
      { 
       get 
       { 
        yield return 

         new ConnectionStringSettings 
         { 
          Name = "Twitters", // This is configuration name, you pass it to DataConnection constructor 
          ProviderName = ProviderName.MySql, // here we are setting database we are working with 
          ConnectionString = "server=" + DatabaseHost + "; database=" + DatabaseName + "" + ";user=" + DatabaseUser + "; password=" + DatabasePassword + ";", 
         }; 
       } 
      } 
     } 

     public class DbTwitters : LinqToDB.Data.DataConnection 
     { 
      public DbTwitters() : base("Twitters") { } 

      public ITable<Account> Accounts { get { return GetTable<Account>(); } } 
      public ITable<Favorite> Favorites { get { return GetTable<Favorite>(); } } 
      public ITable<Retweet> Retweets { get { return GetTable<Retweet>(); } } 

     } 

     internal class MySqlDataReader 
     { 
     } 

    } 
} 

Was ich in meinem Hauptprogramm zu verwenden, ich versuche, Informationen zu speichern, und wie so eine Verbindung zur Datenbank:

using (var db = new TwitterDB()) 
{ 
    var query = from a in db.Accounts 
       select a; 

Nun, mein Problem ist, wenn ich mit der Datenbank zu verbinden versuche, meine pgoram wirft einen Fehler des folgenden Worte:

ein Versuch, eine Auto-Namen-Datenbank für Datei anhängen aspnetdb.mdf fehlgeschlagen ...

enter image description here

Meine Tables.cs Datei vorhanden ist, wie Sie hier sehen können;

enter image description here

Ich habe die Verbindung in der Konfigurationsdatei:

<system.data> 
    <DbProviderFactories> 
    <remove invariant="MySql.Data.MySqlClient" /> 
    <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 

Wie kann ich diesen Fehler zu beheben, damit ich zu meiner Datenbank verbinden kann?

+0

Wenn Sie Ihr Projekt nach 'aspnetdb 'durchsuchen, gibt es irgendwelche Übereinstimmungen? – mjwills

+0

Können Sie Konfigurationsdetails für web.config angeben? Scheint, dass Ihre Verbindungsreihenfolge standardmäßig auf SQL Server und nicht auf den MySQL-Connector festgelegt wurde. –

+0

Ich habe versucht, Aspnetdb, aber keine Übereinstimmungen zu suchen. Ich habe keine Webconfig-Datei, nur die App-Konfiguration: https://pastebin.com/H9RzZudx –

Antwort

3

Überprüfen Sie Ihre app.config-Datei auf eine Verbindungszeichenfolge. Ich bin mir sicher, dass das folgende Tag vorhanden sein wird. Entferne dies und füge eine Einstellung für MySQL hinzu.

2

Dies ist meine appconfig.xml im Projekt mit linq2db.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="linq2db" type="LinqToDB.Configuration.LinqToDBSection, linq2db" requirePermission="false" /> 
    </configSections> 

    <linq2db defaultConfiguration="SQLiteInDir" /> 

    <connectionStrings> 
    <add name="SQLiteInDir" 
     connectionString="Data Source=..\..\DataBase\TestDB.sqlite" 
     providerName="SQLite" /> <!--Place your ConnectionString and ProviderName here--> 
    </connectionStrings> 
</configuration> 

Es besteht keine Notwendigkeit IConnectionStringSettings und ILinqToDBSettings zu implementieren.

Und Sie schreiben Code mit zwei Datacontext Klassen:

  1. DbTwitters: LinqToDB.Data.DataConnection

  2. TwitterDB (es Sie Klassen für Einstellungen writting): LinqToDB.Data.DataConnection (auf Screenshot und in Ihrem Beispiel linq Code)

Welche der Klassennamen ist richtig?

UPD. Ich verstehe. Sie verwenden .Net Core. In ReadMe auf https://github.com/linq2db/linq2db gibt es:

.Net Kern

.Net Kern nicht System.Configuration unterstützt so Verbindungszeichenfolgen konfigurieren Sie ILinqToDBSettings implementieren sollten, zum Beispiel:

... (Code)

Und später gerade eingestellt:

DataConnection.DefaultSettings = new MySettings(); 

Bitte benutzen Sie mach das?

1

Es scheint, dass Ihre Anwendung versucht, aspnetdb.mdf, die Standarddatenbank für die Verwendung der ASP.NET-Anwendungsdienste, zu öffnen/anzuhängen. Diese Verbindung in Machine.config-Datei wie folgt definiert ist:

<connectionStrings> 
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Also, wenn Sie ein clear vor dem Hinzufügen von Verbindungszeichenfolge abzufeuern, sollte das Problem weggehen, da es alle Verbindungszeichenfolgen definiert in geerbt Konfigurationsdateien entfernen wird wie in der machine.config.

<connectionStrings> 
    <clear/> 
    <!--Add your connection string to MySql after this line--> 

    </connectionStrings> 

Siehe clear Element-Dokumentation here

-1

LinqToDB.Data.DataConnection.DefaultSettings = new MySettings();

+0

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/18968623) –

Verwandte Themen