我有一個基於MVC4的項目與一些SQL查詢。它們當前存儲在項目資源(* .resx)中,但編輯資源編輯器內的查詢非常困難。我應該在MVC 4中存儲SQL查詢?
是否有專門的SQL查詢存儲?我應該在哪裏存儲我的查詢?
我有一個基於MVC4的項目與一些SQL查詢。它們當前存儲在項目資源(* .resx)中,但編輯資源編輯器內的查詢非常困難。我應該在MVC 4中存儲SQL查詢?
是否有專門的SQL查詢存儲?我應該在哪裏存儲我的查詢?
爲什麼不使用實體框架作爲ORM?
這是與ASP.NET MVC鏈接的偉大技術。
您也可以將SQL移動到MSSQL中的存儲過程。 在這種情況下,我會建議使用Database Project將SQL存儲在您的解決方案中。
無論如何,在代碼或資源中存儲SQL並不是一個好習慣。
我使用實體框架,但有很多大的查詢,這是由手優化 – skayred
您可以將您的查詢作爲存儲過程存放在數據庫中。這給你封裝了你的數據庫邏輯 - 一個'關注點分離'。
不,沒有專門的SQL查詢存儲。
資源文件聽起來有點不尋常,我寧願把它們放在我的代碼中的常量字符串中,封裝在數據層中。可能在使用參數應用的SQL查詢的每種方法中,等等。
但是我真的會推薦避免普通的舊SQL,並使用實體框架或LINQ2SQL來代替。
我有很多大量的數據真正大查詢 - 是否有任何可能性使用EF沒有性能損失? – skayred
我用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
組裝到一個類。
爲什麼不使用存儲過程? – Oded
我可以傳遞一些參數給存儲過程嗎? – skayred
是的。這是基本的功能。 – Oded