c# - 有什么方法可以在不使用 EF 的情况下将 MSSQL 服务器连接到 .NET CORE (2.2) API?
问题描述
我是.Net Core 的新手,截至目前,我正在尝试从.Net Core API 连接MSSQL Server 中的现有数据库。
但是我发现的所有示例都是使用 EF。
但我想从用户定义的类连接 MSSQL 服务器,如下所示。
数据库连接.cs
public class DatabaseConnection
{
private SqlDataAdapter sqlAdapter;
private SqlConnection sqlConnection;
SqlCommand sqlCommand = new SqlCommand();
// Initialise Connection
public DatabaseConnection()
{
sqlAdapter = new SqlDataAdapter();
sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
}
// Open Database Connection if Closed or Broken
private SqlConnection openConnection()
{
if (sqlConnection.State == ConnectionState.Closed || sqlConnection.State == ConnectionState.Broken)
{
sqlConnection.Open();
}
return sqlConnection;
}
}
在构造函数内部,我得到了错误
应用设置.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=HealthAPI;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
是否有可能在不使用 EF 的情况下与数据库进行连接?
解决方案
我使用解决方法做到了这一点。下面是代码。
public abstract class BaseDataService
{
private Database database = null;
public BaseDataService()
{
DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory(new SystemConfigurationSource(false).GetSection), false);
this.database = DatabaseFactory.CreateDatabase("_connection");
}
public Database SqlDatabase
{
get
{
return this.database;
}
set
{
this.database = value;
}
}
}
App.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="system.data" type="System.Data.Common.DbProviderFactoriesConfigurationHandler, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</configSections>
<connectionStrings>
<add name="_connection" connectionString="Server=localhost;Database=DBNAME;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
用法
public class MyDataService : BaseDataService
{
public IList<Test> ReadTest()
{
IList<Test> testList = new List<Test>();
DbCommand selectCommand = null;
selectCommand = SqlDatabase.GetStoredProcCommand("[dbo].[CSP_Test_SelectAll]");
using (DataSet result = SqlDatabase.ExecuteDataSet(selectCommand))
{
if (result.Tables[0].Rows.Count > 0)
{
DataTable dataTable = result.Tables[0];
feesList = dataTable.ConvertTo<Test>();
}
}
return testList;
}
}
需要的包裹
<PackageReference Include="EnterpriseLibrary.Data.NetCore" Version="6.0.1313" />
编辑:
我浏览了您的代码,问题是获取配置值
public DatabaseConnection(IConfiguration configuration)
{
string connectionString = configuration.GetConnectionString("DefaultConnection");
sqlAdapter = new SqlDataAdapter();
sqlConnection = new SqlConnection(connectionString);
}
推荐阅读
- javascript - 登录重定向成功后 Auth0 isAuthenticated() 返回 false
- regex - 带有可选部分的正则表达式字符串
- javascript - 错误超级表达式必须为 null 或函数
- javascript - 我的活动课程暂时转到下一个链接,只是在页面完成加载后返回上一个链接
- java - Hibernate FK 参考问题
- c# - C# Linq 查询不返回 Enumerable 集合
- c# - 当我有一个按钮时,C#keydown 不起作用
- sql-server - 从 2012 迁移到 SQL Server 2016 时超出限制错误 SSRS RDL 文件
- swift - Xcode 12、iOS 14、Pod
- spring - Spring MVC 多模块属性源失败