我有一个基于 MVC4 的项目,其中包含一些 SQL 查询。它们当前存储在项目资源 (*.resx) 中,但在资源编辑器中编辑查询非常困难。
是否有专门的 SQL 查询存储?我应该在哪里存储我的查询?
我有一个基于 MVC4 的项目,其中包含一些 SQL 查询。它们当前存储在项目资源 (*.resx) 中,但在资源编辑器中编辑查询非常困难。
是否有专门的 SQL 查询存储?我应该在哪里存储我的查询?
您可以将查询作为存储过程放入数据库中。这为您提供了数据库逻辑的封装——“关注点分离”。
I solved it with T4. Now I have Queries
directory in my project and SQLGenerator.tt
in it. Here is my template source code:
<#@ 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;
}
#>
This code assembles all *.sql
files in Queries
directory to one class.
不,没有专门用于 SQL 查询的存储。
资源文件听起来有点不寻常,我宁愿将它们放在我的代码中的常量字符串中,封装在数据层中。可能在使用应用参数的 SQL 查询的每个方法中,等等。
但是,我真的建议避免使用普通的旧 SQL,而是使用 Entity Framework 或 LINQ2SQL。
为什么不使用实体框架作为 ORM?
在与 ASP.NET MVC 的链接中,这是一项很棒的技术。
您也可以将 SQL 移动到 MSSQL 中的存储过程。在这种情况下,我建议使用 Database Project 将您的 SQL 存储在您的解决方案中。
无论如何,将 SQL 存储在代码或资源中并不是一个好习惯。