DataAdapter/DataTable 대신 저수준 ADO.NET 인터페이스를 통한 CRUD 작업을 지원하는 .NET Core 용 기존 DAL 라이브러리 중 하나를 사용할 수 있습니다. 최근: 자동 SQL 문 생성, 추상 쿼리 및 간단한 레코드 CRUD 작업을 지원하는 공급자 독립 DAL을 게시했습니다.
는 예를 들어, 문제의 코드는 다음과 같은 방법으로 재 구현 할 수 있습니다
var con = new SqlConnection(m_ConnectString);
var dbFactory = new NReco.Data.DbFactory(
System.Data.SqlClient.SqlClientFactory.Instance);
var dbCmdBuilder = new NReco.Data.DbCommandBuilder(dbFactory);
var dbAdapter = new NReco.Data.DbDataAdapter(con, dbCmdBuilder);
var selectRecordsList = dbAdapter.Select(
new Query("some_table")).ToList<Dictionary<string,object>>();
복잡한 SQL 쿼리를 응용 프로그램 수준의 데이터보기로 실행 될 수있다
dbCmdBuilder.Views["some_view"] = new DbDataView(
@"SELECT @columns FROM Employee emp
LEFT JOIN Company c ON (c.Id=emp.CompanyId)
@where[ WHERE {0}] @orderby[ ORDER BY {0}]
") {
FieldMapping = new Dictionary<string,string>() {
{"Id", "emp.Id"},
{"*", "emp.*, c.Title as CompanyTitle"}
}
};
var someViewRS = dbAdapter.Select(new Query("some_view")).ToRecordSet();
NReco.Data 시도하려고하지 않습니다 SQL을 자체 쿼리 (예 : LINQ 않습니다)로 바꿉니다. 대신 비즈니스 로직 에서 간단한 DB 독립적 쿼리를 만들고 읽기 전용 테이블처럼 액세스하는 특수한 app-level 데이터 뷰로 복잡한 SQL 구문을 캡슐화 할 수 있습니다.
은 또한 (EF 코어에서 FromSql 같은) Select
메서드 오버로드와 직접 원시 SQL 쿼리를 지정할 수 있습니다 :
var userModels = dbAdapter.Select("select * from users where id={0}", 5).ToList<User>();
글쎄, 당신은 [SqlDataAdapter를]에 대한 참조 소스를보고 시작할 수 (http://referencesource.microsoft.com/#System.Data/System/Data/SqlClient/SqlDataAdapter.cs) 및 [DataTable을 ] (http://referencesource.microsoft.com/#System.Data/System/Data/DataTable.cs) 그리고 실제로 필요한 부분을 다시 구현하십시오 ... 또한 행운을 빈다. – Corak
답장을 보내 주셔서 감사합니다. 나는 많은 사람들이이 문제에 부딪쳤을 것이라고 추측했으며, 그들은 프레임 워크의 일부를 구현함으로써 모든 문제를 해결하려고하지는 않는다. – Hughgo
글쎄, 한 가지 문제는 .Net Core가'DataTable'에 대해 알지 못한다면'dt'를 리턴 할 수없고'DataTable'과 함께 작동하는 다른 모든 것들은 더 이상 작동하지 않는다는 것입니다. 그래서 문제는'DataTable'의 어떤 기능이 정말로 필요한가에 대한 것입니다. 대신에'DataReader'가 .Net Core에서 사용 가능하다면 그 대신에'DataReader'를 사용할 수 있습니까? – Corak