2

我有一个基于 MVC4 的项目,其中包含一些 SQL 查询。它们当前存储在项目资源 (*.resx) 中,但在资源编辑器中编辑查询非常困难。

是否有专门的 SQL 查询存储?我应该在哪里存储我的查询?

4

4 回答 4

3

您可以将查询作为存储过程放入数据库中。这为您提供了数据库逻辑的封装——“关注点分离”。

于 2012-11-27T11:25:21.110 回答
1

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.

于 2012-11-28T04:08:37.150 回答
1

不,没有专门用于 SQL 查询的存储。

资源文件听起来有点不寻常,我宁愿将它们放在我的代码中的常量字符串中,封装在数据层中。可能在使用应用参数的 SQL 查询的每个方法中,等等。

但是,我真的建议避免使用普通的旧 SQL,而是使用 Entity Framework 或 LINQ2SQL。

于 2012-11-27T11:26:22.607 回答
0

为什么不使用实体框架作为 ORM?

在与 ASP.NET MVC 的链接中,这是一项很棒的技术。

您也可以将 SQL 移动到 MSSQL 中的存储过程。在这种情况下,我建议使用 Database Project 将您的 SQL 存储在您的解决方案中。

无论如何,将 SQL 存储在代码或资源中并不是一个好习惯。

于 2012-11-27T11:24:47.550 回答