私のインターンシップでは、バックグラウンドでデータベースと通信するプログラムを作成しています。プログラムは MVC(Model-View-Controller) 方式で階層化されています。
ビューの場合、DataAccesLayer(DAL) と呼ばれるものを介してデータにアクセスしたいと考えています。そのビューには最小限の知識しかないため、呼び出したいクエリの ID を渡す必要があります。呼び出しは DAL 内で行われます。次に、ID を使用して、クエリを保持するクラスにクエリを返し、DAL 内で実行するように依頼します。視覚化のための画像。
私が今抱えている問題は、Read 関数でクエリを実行する方法です。DAL のコードは次のとおりです。
public class DataAccesLayer
{
private Queries queryloader;
private RoadsoftDigitacV8DataContext db;
public DataAccesLayer()
{
queryloader = new Queries();
db = new RoadsoftDigitacV8DataContext();
}
public List Read(int ID)
{
IQueryable query;
query = queryloader.GetQuery(ID);
return query.ToList();
}
}
クエリ クラスのコード:
public class Queries
{
private Dictionary<int, IQueryable object> queryDict;
private ErrorLoggerWinLog logger;
public Queries()
{
logger = ErrorLoggerWinLog.Instance();
queryDict = new Dictionary<int, IQueryable object>();
queryDict.Add(1, from d in db.Drivers
select d);
}
public object GetQuery(int ID)
{
var query;
if(queryDict.TryGetValue(ID, out query) == false)
{
logger.WriteLine("Queries", "Could not find the query specified", ErrorLoggerWinLog.loggerlevel.Error);
}
return query;
}
}
私は疑問に思っています、これは可能ですか?現在、機能していないようです。私はおそらく何かを忘れているか、何か重要なものを見逃しています。この種のセットアップの経験がある人はいますか、それともまったく別のソリューションを検討する必要がありますか?
編集:現在、読み取り関数にコマンドが欠落しているように、クエリを実行していないようです。ただし、Datacontext は満たされていますが、これはプログラムの別のセクションで行われています。
Edit2: 今、私は IRepository パターンを調べています。これは素晴らしい学習体験です。コメントとアンサーに時間を割いてくれた皆さんに感謝します!