gpt4 book ai didi

c# - 使用 Linq 连接数据库时出错

转载 作者:IT老高 更新时间:2023-10-29 00:17:09 38 4
gpt4 key购买 nike

我正在尝试使用 linq2db 和 mysql 连接到我的数据库,所以,我有一个像这样的简单连接:

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
{
}

}
}

我正尝试在我的主程序中使用它来存储信息并像这样连接到数据库:

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

现在,我的问题是,当我尝试连接到数据库时,我的 pgoram 抛出一个错误,内容如下:

尝试为文件 aspnetdb.mdf 附加一个自动命名的数据库失败...

enter image description here

我的 Tables.cs 文件存在,正如您在此处看到的那样;

enter image description here

我在配置文件中有连接:

<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>

如何修复此错误以便连接到我的数据库?

最佳答案

这是我在 linq2db 项目中的 appconfig.xml。

<?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>

无需实现 IConnectionStringSettings 和 ILinqToDBSettings。

然后您发布带有两个 DataContext 类的代码:

  1. DbTwitters:LinqToDB.Data.DataConnection(您在其中编写设置类)

  2. TwitterDB:LinqToDB.Data.DataConnection(在屏幕截图和您的示例 linq 代码中)

哪个类名是正确的?

UPD. 我明白了。您正在使用 .Net Core。在 https://github.com/linq2db/linq2db 上的自述文件中有:

.Net 核心

.Net Core 不支持 System.Configuration,因此要配置连接字符串,您应该实现 ILinqToDBSettings,例如:

...(代码)

然后设置:

DataConnection.DefaultSettings = new MySettings();

这是你做的吗?

关于c# - 使用 Linq 连接数据库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47745645/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com