それぞれ数百行の長さのレガシー SQL ステートメントが数十個与えられました。Models
各 SQL は、共有プロジェクト内の独自の一意の POCO を持つコードにマップされます。
たとえば、SQLには、プロジェクトSelect Name, Birthday From People
に同等の POCO があります。Models
public class BirthdayPerson : SqlResultBase {
public string Name { get; set; }
public datetime Birthday { get; set; }
//SqlResultBase abstraction:
public string HardcodedSql { get {
return "Select Name, Birthday From People";
}}
}
私の DAL には、SQL の POCO を表す単一の汎用 SQL ランナーがあります。<T>
したがって、私のビジネスロジックは次のように呼び出すことができますGetSqlResult<BirthdayPerson>()
:
public IEnumerable<T> GetSqlResult<T>() where T : SqlResultBase, new() {
return context.Database.SqlQuery<T>((new T()).HardcodedSql);
}
問題は、私のModels
ライブラリがアプリケーション全体で使用されており、その HardcodedSql プロパティでアプリケーション全体に SQL を公開したくないことです。
これは私が使用しているアーキテクチャです: