2

いくつかの SQL クエリを含む MVC4 ベースのプロジェクトがあります。現在、プロジェクト リソース (*.resx) に保存されていますが、リソース エディター内でクエリを編集するのは非常に困難です。

特殊な SQL クエリ ストレージはありますか? クエリはどこに保存すればよいですか?

4

4 に答える 4

3

クエリをデータベースにストアド プロシージャとして配置できます。これにより、データベース ロジックのカプセル化、つまり「関心の分離」が実現します。

于 2012-11-27T11:25:21.110 に答える
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;
    }
#>

このコードは、ディレクトリ内のすべての*.sqlファイルを1つのクラスにアセンブルします。Queries

于 2012-11-28T04:08:37.150 に答える
1

いいえ、SQL クエリ専用のストレージはありません。

リソース ファイルは少し変わっているように聞こえますが、コード内の定数文字列に入れ、データレイヤーにカプセル化したいと思います。パラメータが適用される SQL クエリを使用する各メソッド内で可能です。

ただし、単純な古い SQL を避け、代わりに Entity Framework または LINQ2SQL を使用することを強くお勧めします。

于 2012-11-27T11:26:22.607 に答える
0

Entity Framework を ORM として使用しないのはなぜですか?

ASP.NET MVC と連携した優れた技術です。

また、SQL を MSSQL のストアド プロシージャに移動することもできます。この場合、データベース プロジェクトを使用して SQL をソリューションに格納することをお勧めします。

いずれにせよ、SQL をコードやリソースに格納することはあまり良い方法ではありません。

于 2012-11-27T11:24:47.550 に答える