.NET Core에서 ADO.NET을 사용할 수 있습니까?
대부분의 튜토리얼은 Ado에 대한 언급이 없는 Entity Framework입니다.그물을 치다.NetCore 프로젝트."레거시" 데이터베이스가 있으므로 EF/"코드 우선" 접근 방식은 선택사항이 아닙니다.
ADO.NET 연결의 경우, 다음과 같습니다.System.Data.SqlClientASP.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 |
