私は既存のSQLServerデータベースを持っており、データベースごとに1つずつ、大きな特定のログファイル(多くの場合100 MB以上)からのデータを保存しています。いくつかの分析の後、データベースは再び削除されます。
データベースから、VisualStudioデザイナーを介してEntityFrameworkモデルとDataSetモデルの両方を作成しました。SqlBulkCopy
DataSetは、非常に複雑な解析プロセスの後に、を使用してデータを一括インポートするためだけのものです。次に、すべてのクエリはEntity Framework Modelを使用して実行されます。CreateQuery
このモデルのメソッドは、次のようなインターフェイスを介して公開されます。
public IQueryable<TTarget> GetResults<TTarget>() where TTarget : EntityObject, new()
{
return this.Context.CreateQuery<TTarget>(typeof(TTarget).Name);
}
さて、時々私のファイルは非常に小さいので、そのような場合はデータベースへのインポートを省略したいのですが、エンティティとしてアクセス可能なデータのメモリ内表現を持っているだけです。アイデアは、DataSetを作成することですが、一括インポートする代わりに、インターフェイスを介してアクセスできるObjectContextに直接転送します。
これは意味がありますか?
これまでにこの変換で行ったことは次のとおりです。DataSet内のすべてのテーブルをトラバースし、単一の行を対応するタイプのエンティティに変換して、タイプされたEntityコンテキストクラスのインスタンス化されたオブジェクトに追加します。
MyEntities context = new MyEntities(); //create new in-memory context
///....
//get the item in the navigations table
MyDataSet.NavigationResultRow dataRow = ds.NavigationResult.First(); //here, a foreach would be necessary in a true-world scenario
NavigationResult entity = new NavigationResult
{
Direction = dataRow.Direction,
///...
NavigationResultID = dataRow.NavigationResultID
}; //convert to entities
context.AddToNavigationResult(entity); //add to entities
///....
エンティティタイプごとにコンバーターを作成し、データセット内の各テーブルを反復処理する必要があるため、非常に面倒な作業です。データベースモデルを変更した場合は注意してください。
MyEntities
また、 SQL Serverデータベースに有効な接続文字列を提供した場合にのみ、インスタンス化できることがわかりました。毎回本格的なデータベースに実際に書き込みたくないので、これは私の意図を妨げます。インメモリプロキシデータベースをいくつか持つつもりです。
もっと簡単にできますか?DataSetオブジェクトからObjectContextを生成するなど、このような変換を自動化する方法はありますか?
PS:ユニットテストについて、いくらか関連しているように見えますが、正確ではない質問をいくつか見ました。