2012-11-27 5 views
2

일부 SQL 쿼리와 함께 MVC4 기반 프로젝트가 있습니다. 현재 프로젝트 리소스 (* .resx)에 저장되어 있지만 리소스 편집기에서 쿼리를 편집하는 것은 매우 어렵습니다.MVC 4에 SQL 쿼리를 어디에 저장해야합니까?

특수한 SQL 쿼리 저장소가 있습니까? 내 검색어는 어디에 저장해야합니까?

+4

왜 저장 프로 시저를 사용하지 않습니까? – Oded

+0

일부 매개 변수를 저장 프로 시저에 전달할 수 있습니까? – skayred

+1

예. 기본 기능입니다. – Oded

답변

0

ORM으로 Entity Framework를 사용하지 않는 이유는 무엇입니까?

ASP.NET MVC와의 링크에서 훌륭한 기술입니다.

또한 SQL을 MSSQL의 저장 프로 시저로 이동할 수 있습니다. 이 경우 데이터베이스 프로젝트를 사용하여 솔루션에 SQL을 저장하는 것이 좋습니다.

어쨌든 SQL을 코드 또는 리소스에 저장하는 것은 대단한 방법이 아닙니다.

+0

엔티티 프레임 워크를 사용하지만 손으로 ​​최적화 된 큰 쿼리가 많이 있습니다. – skayred

3

저장 프로 시저로 데이터베이스에 쿼리를 넣을 수 있습니다. 이것은 데이터베이스 논리의 캡슐화를 제공합니다 - '관심사의 분리'.

1

아니요, SQL 쿼리를위한 특수 저장소가 없습니다.

리소스 파일이 약간 이상하게 들리지만 데이터 레이어에 캡슐화 된 코드의 상수 문자열에 넣으려고합니다. 매개 변수가 적용되는 SQL 쿼리를 사용하는 각 메서드 내에서 가능합니다.

그러나 일반 SQL을 피하고 대신 Entity Framework 또는 LINQ2SQL을 사용하는 것이 좋습니다.

+0

많은 양의 데이터에 대해 큰 쿼리를 많이 사용합니다. 성능 손실없이 EF를 사용할 수있는 확실성이 있습니까? – skayred

1

T4으로 해결했습니다. 지금 내 프로젝트에 Queries 디렉토리가 있고 그 안에 SQLGenerator.tt 디렉토리가 있습니다.

<#@ template debug="true" hostSpecific="true" #> 
<#@ output extension=".cs" #> 
<#@ Assembly Name="System.Core" #> 
<#@ Assembly Name="System.Windows.Forms" #> 
<#@ import namespace="System" #> 
<#@ import namespace="System.IO" #> 
<#@ import namespace="System.Diagnostics" #> 
<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Collections" #> 
<#@ import namespace="System.Collections.Generic" #> 

<#var sqlScriptsContent = ReadSql(); #> 

namespace MathApplication.SQL 
{ 
public class Queries 
{ 
<# foreach(var file in sqlScriptsContent) { #> 
    public string <#= file.Key #> = @"<#= file.Value #>"; 
<# } #> 
} 
} 

<#+ 
public Dictionary<string, string> ReadSql() { 
    var filePaths = Directory.GetFiles(Host.ResolvePath(".")); 

    var result = new Dictionary<string, string>(); 

    foreach (var filename in filePaths) { 
     if (filename.EndsWith(".sql")) { 
      result[Path.GetFileNameWithoutExtension(filename)] = System.Text.RegularExpressions.Regex.Replace(File.ReadAllText(filename), @"\s+", " ").Replace("\"", "'"); 
     } 
    } 

    return result; 
    } 
#> 

이 코드는 하나 개의 클래스에 Queries 디렉토리에있는 모든 *.sql 파일을 조립 : 여기 내 템플릿 소스 코드입니다.

관련 문제