2012-11-27 53 views
2

我有一個基於MVC4的項目與一些SQL查詢。它們當前存儲在項目資源(* .resx)中,但編輯資源編輯器內的查詢非常困難。我應該在MVC 4中存儲SQL查詢?

是否有專門的SQL查詢存儲?我應該在哪裏存儲我的查詢?

+4

爲什麼不使用存儲過程? – Oded

+0

我可以傳遞一些參數給存儲過程嗎? – skayred

+1

是的。這是基本的功能。 – Oded

回答

0

爲什麼不使用實體框架作爲ORM?

這是與ASP.NET MVC鏈接的偉大技術。

您也可以將SQL移動到MSSQL中的存儲過程。 在這種情況下,我會建議使用Database Project將SQL存儲在您的解決方案中。

無論如何,在代碼或資源中存儲SQL並不是一個好習慣。

+0

我使用實體框架,但有很多大的查詢,這是由手優化 – skayred

3

您可以將您的查詢作爲存儲過程存放在數據庫中。這給你封裝了你的數據庫邏輯 - 一個'關注點分離'。

1

不,沒有專門的SQL查詢存儲。

資源文件聽起來有點不尋常,我寧願把它們放在我的代碼中的常量字符串中,封裝在數據層中。可能在使用參數應用的SQL查詢的每種方法中,等等。

但是我真的會推薦避免普通的舊SQL,並使用實體框架或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組裝到一個類。

相關問題