ORM없이 ASP.NET MVC 사용
-
03-07-2019 - |
문제
ASP MVC 응용 프로그램에서 표준 SQL (LINQ에서 SQL 또는 기타 ORM)을 사용하여 데이터베이스를 쿼리합니다.
데이터베이스 결과를 내 견해로 전달하고 내 견해에 대한 결과를 반복하고 싶습니다. 하지만 어떻게 해야할지 잘 모르겠습니다. 내가 본 모든 예는 일부 문자열이나 L2를 사용합니다. 나는 중첩 된 해시 타이블과 같은 것을 통과시키고 싶지만, 내가 생각할 수있는 유일한 것은 SQLDATAREADER 객체를보기에 전달하는 것입니다. 그러나 이것은 정말 나쁜 생각처럼 들립니다.
표준 SQL 쿼리에서 내보기에 데이터베이스 결과를 표시하는 방법은 무엇입니까? 나는 LINQ 나 다른 ORM을 정말로 사용하고 싶지만 요구 사항은 우리가하지 않는 것을 지시합니다 (이유를 묻지 말고 이해가 안 돼요). 나는 VB에서 이것을하고 있습니다. 제공된 모든 C# 예제를 변환하기 위해 최선을 다하겠습니다.
해결책
전송하려는 데이터에 대한 간단한 클래스를 생성 한 다음 수동으로 데이터 리더에서 컨트롤러의 객체 목록을 채우고이를보기로 전달할 수 있습니다 (예 : C#이지만 변환하기가 쉽습니다).
// open your connection / datareader etc.
List<Customer> customers = new List<Customer>();
while(dataReader.Read())
{
Customer c = new Customer();
c.Id = dataReader.GetInt32(0);
c.Name = dataReader.GetString(1);
// etc (you might want to use string indexers instead of ints for the get methods)
customers.Add(c);
}
// close and dispose your datareader / connection etc as usual
return View("List", customers);
다른 팁
MVC는 우려의 분리에 관한 것입니다. SQLDATAREADERS, DATATABLE 또는 SYSTEM.DATA 네임 스페이스에있는 클래스를 전달하는 것은 좋은 생각이 아닙니다. 데이터베이스와 대화 할 수있는 모델 과이 모델을보기로 전달하는 컨트롤러를 정의해야합니다. 회사 정책에 따르면 ORM을 사용하지 않는다고 말하면 클래식 웹 포름이 MVC 패턴보다 시나리오에 더 적합 할 수 있습니다.
나는 Rashack에 동의합니다. 이 기사에서는 자세히 설명합니다.링크 텍스트
간단히 말해서, 데이터 가능 및 DataReader를 사용하여 수행하는 방법은 다음과 같습니다.
private DataTable GetData()
{
DataTable dt = new DataTable();
using (SqlConnection connection
= new SqlConnection("ConnectionString"))
using (SqlCommand command = new SqlCommand())
{
command.Connection = connection;
command.CommandText = "SELECT * FROM Customers";
connection.Open();
using (SqlDataReader reader =
command.ExecuteReader
(CommandBehavior.CloseConnection))
{
dt.Load(reader);
}
}
return dt;
}
그런 다음 해당 데이터 가능을 전달하는 엔티티 객체로 읽을 수 있습니다.
LINQ 또는 ORM을 사용하는 것보다 이것이 훨씬 더 나은 성능을 제공 할 수 있다고 생각합니다.
DataTables를 사용해보십시오 - DataTable은 IdatAreader의 데이터를로드 할 수 있습니다 ...