.NET Core에서 ADO.NET을 사용할 수 있습니까?
대부분의 튜토리얼은 Ado에 대한 언급이 없는 Entity Framework입니다.그물을 치다.NetCore 프로젝트."레거시" 데이터베이스가 있으므로 EF/"코드 우선" 접근 방식은 선택사항이 아닙니다.
ADO.NET 연결의 경우, 다음과 같습니다.System.Data.SqlClient
ASP.NET Core 프로젝트에 사용할 수 있습니까?
.NET Framework 프로젝트 템플릿을 사용할 때 사용할 수 있지만 .NET Core 프로젝트에서도 사용할 수 있습니까?
기존의SqlConnection
그리고 다른 관련 연결은 여전히 내부에 존재합니다.System.Data.SqlClient
네임스페이스이며 전체 프레임워크 또는 .NET Core를 사용하여 예상대로 작동해야 합니다.
다음과 같이 적절한 참조를 추가하고 설명을 사용하여 포함하기만 하면 됩니다.System.Data.SqlClient
네임스페이스(아래 참조)project.json
파일:
그런 다음 익숙한 구문을 사용하여 호출합니다.
using(var connection = new SqlConnection("{your-connection-string}"))
{
// Do work here
}
따라서 기존 레거시 데이터베이스에 연결할 수 있는 유효한 연결 문자열만 있으면 됩니다.
ORM 사용 관련
또한 일부 사람들은 Entity Framework의 Micro-ORM 대체품인 Dapper를 사용하고 있는데, 이는 분명히 더 유연합니다.ADO.NET 대신 사용하면 장점이 있습니까?
이러한 ORM(객체 관계형 매핑기)은 데이터 리더를 통해 각 행을 반복적으로 분석하고 각 개체를 수동으로 구축하는 것이 아니라 기존 데이터베이스 데이터를 특정 클래스 및 개체에 보다 쉽게 매핑할 수 있는 유용하고 강력한 도구입니다.
성능 면에서는 궁극적으로 쿼리를 사용하여 수행할 작업에 달려 있습니다. ADO.NET은 일반적으로 데이터베이스에 대한 기본적인 연결이기 때문에 가장 빠릅니다. 그러나 일부 시나리오에서는 Dapper가 실제로 이를 능가할 수 있습니다.Entity Framework는 매우 유용하지만 일반적으로 ORM이 매우 크기 때문에 성능 면에서 뒤처집니다.
다시 한 번 말씀드리지만, 궁극적으로 여러분이 무엇을 하고 있는지에 따라 다르겠지만, 모두 실행 가능한 옵션입니다.
.NET Core 2.0에는 DataSet, DataTable 및 SQLDataAdapter가 있습니다.제 답변을 https://blogs.msdn.microsoft.com/devfish/2017/05/15/exploring-datatable-and-sqldbadapter-in-asp-net-core-2-0/ 에서 확인하십시오.
아래 코드는 정상적으로 작동합니다.
public static DataTable ExecuteDataTableSqlDA(SqlConnection conn, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
System.Data.DataTable dt = new DataTable();
System.Data.SqlClient.SqlDataAdapter da = new SqlDataAdapter(cmdText, conn);
da.Fill(dt);
return dt;
}
Joe Healy가 DotNet Core 2.0의 답변에서 언급했듯이 모든 시스템을 사용할 수 있습니다.데이터 기능.
너겟 추가:
- 마이크로소프트.내선 번호.배열
- 마이크로소프트.내선 번호.배열.Json - Json에서 연결 문자열을 읽습니다.
- 시스템. 데이터.흔한
- 시스템. 데이터.SqlClient
config.json 예제:
{
"connectionString": "your-db-connection-settings"
}
다음은 전체 콘솔 앱의 예입니다.
class Program
{
static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("config.json", false)
.Build();
var connectionString = configuration.GetSection("connectionString").Value;
if(string.IsNullOrEmpty(connectionString))
throw new ArgumentException("No connection string in config.json");
using (var conn = new SqlConnection(connectionString))
{
var sql = "SELECT * FROM ExampleTable";
using (var cmd = new SqlCommand(sql, conn))
{
using (var adapter = new SqlDataAdapter(cmd))
{
var resultTable = new DataTable();
adapter.Fill(resultTable);
}
}
}
}
}
.NET Core에는 버전 2.0 이전의 DataSet, DataTable 및 관련 개체가 없습니다.그러나 2.0 이전 버전에서는 Connection, Command, Parameter, DataReader 및 기타 관련 개체와 같은 핵심 기능이 모두 포함되어 있습니다.
다음 호출을 사용하여 SQL Server 데이터베이스 공급자를 통해 SQL Server에 대한 연결을 단순화할 수 있습니다.
public class BaseDataAccess
{
protected string ConnectionString { get; set; }
public BaseDataAccess()
{
}
public BaseDataAccess(string connectionString)
{
this.ConnectionString = connectionString;
}
private SqlConnection GetConnection()
{
SqlConnection connection = new SqlConnection(this.ConnectionString);
if (connection.State != ConnectionState.Open)
connection.Open();
return connection;
}
protected DbCommand GetCommand(DbConnection connection, string commandText, CommandType commandType)
{
SqlCommand command = new SqlCommand(commandText, connection as SqlConnection);
command.CommandType = commandType;
return command;
}
protected SqlParameter GetParameter(string parameter, object value)
{
SqlParameter parameterObject = new SqlParameter(parameter, value != null ? value : DBNull.Value);
parameterObject.Direction = ParameterDirection.Input;
return parameterObject;
}
protected SqlParameter GetParameterOut(string parameter, SqlDbType type, object value = null, ParameterDirection parameterDirection = ParameterDirection.InputOutput)
{
SqlParameter parameterObject = new SqlParameter(parameter, type); ;
if (type == SqlDbType.NVarChar || type == SqlDbType.VarChar || type == SqlDbType.NText || type == SqlDbType.Text)
{
parameterObject.Size = -1;
}
parameterObject.Direction = parameterDirection;
if (value != null)
{
parameterObject.Value = value;
}
else
{
parameterObject.Value = DBNull.Value;
}
return parameterObject;
}
protected int ExecuteNonQuery(string procedureName, List<DbParameter> parameters, CommandType commandType = CommandType.StoredProcedure)
{
int returnValue = -1;
try
{
using (SqlConnection connection = this.GetConnection())
{
DbCommand cmd = this.GetCommand(connection, procedureName, commandType);
if (parameters != null && parameters.Count > 0)
{
cmd.Parameters.AddRange(parameters.ToArray());
}
returnValue = cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
//LogException("Failed to ExecuteNonQuery for " + procedureName, ex, parameters);
throw;
}
return returnValue;
}
protected object ExecuteScalar(string procedureName, List<SqlParameter> parameters)
{
object returnValue = null;
try
{
using (DbConnection connection = this.GetConnection())
{
DbCommand cmd = this.GetCommand(connection, procedureName, CommandType.StoredProcedure);
if (parameters != null && parameters.Count > 0)
{
cmd.Parameters.AddRange(parameters.ToArray());
}
returnValue = cmd.ExecuteScalar();
}
}
catch (Exception ex)
{
//LogException("Failed to ExecuteScalar for " + procedureName, ex, parameters);
throw;
}
return returnValue;
}
protected DbDataReader GetDataReader(string procedureName, List<DbParameter> parameters, CommandType commandType = CommandType.StoredProcedure)
{
DbDataReader ds;
try
{
DbConnection connection = this.GetConnection();
{
DbCommand cmd = this.GetCommand(connection, procedureName, commandType);
if (parameters != null && parameters.Count > 0)
{
cmd.Parameters.AddRange(parameters.ToArray());
}
ds = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch (Exception ex)
{
//LogException("Failed to GetDataReader for " + procedureName, ex, parameters);
throw;
}
return ds;
}
}
자세한 내용과 예제는 다음 문서를 참조하십시오. http://www.ijz.today/2016/09/net-core-10-connecting-sql-server.html
ADO.NET Core에서는 시스템을 사용하지 않습니다.Data.SqlClient를 사용하지만 Microsoft를 사용합니다.Data.SqlClient.지금까지, 저는 이전 코딩을 모두 사용할 수 있었습니다!
Mr_LinDowsMac
그래도 EF를 사용할 수 있습니다.
scape-dbcontext라는 도구가 있습니다.
기존 데이터베이스 구조를 기반으로 "엔티티" 부분 클래스를 만듭니다.
다른 코드와 별도로 생성되는 "엔티티" 및 dbcontext 클래스의 관리를 고려해야 합니다.(이 도구는 기존 클래스를 재정의할 수 있습니다.)모델 프로젝트?
.net core에서 SQL SERVER 및 Oracle 프로젝트에 사용했습니다.
다른 패키지가 필요합니다.
- SQL SERVER가 마이크로소프트 패키지를 선택하는 경우
- Oracle이 Oracle 패키지를 선택한 경우(이전 .net Core 버전이라도 해당 패키지를 선택한 경우)
이 링크 보기
언급URL : https://stackoverflow.com/questions/38510740/is-ado-net-in-net-core-possible
'programing' 카테고리의 다른 글
MariaDB에서 TLS를 사용하도록 설정하지만 TLS가 없는 연결은 계속 허용 (0) | 2023.06.09 |
---|---|
ASP.NET MVC를 사용하여 마스터 페이지에서 스크립트 사용 (0) | 2023.06.09 |
*nix select 및 exceptfds/errorfds semantic (0) | 2023.06.09 |
파일 또는 어셈블리 '시스템'을 로드할 수 없습니다.보안.주요한.윈도우' (0) | 2023.06.09 |
TypeScript 컴파일러 오류에도 불구하고 내 React Native 앱이 성공적으로 빌드되는 이유는 무엇입니까? (0) | 2023.06.09 |