。2、メモリテーブル、一時テーブルを見つけるためにインターネット
EntityFrameworkCore.MemoryJoin //メモリテーブルに直接組合ステッチ照会を選択します。1つのインストールパッケージを http://tsherlock.tech/2018/03/20/joining-in-memoryエンティティへ---リスト問合せフレームワーク/
DbContextクラスを追加した: 保護DbSet <QueryModelClass> {QueryDataがGETである; SET} //は大型化取り除くコードテーブルコード大型化注意
:2つの参照 https://dev.azureを.COM / pawelgerr / _git / Thinktecture.EntityFrameworkCore ;または: https://github.com/yangzhinong/Thinktecture.EntityFrameworkCore DLLにコンパイル
EntityFrameworkCore.MemoryJoin //メモリテーブルに直接組合ステッチ照会を選択します。1つのインストールパッケージを http://tsherlock.tech/2018/03/20/joining-in-memoryエンティティへ---リスト問合せフレームワーク/
DbContextクラスを追加した: 保護DbSet <QueryModelClass> {QueryDataがGETである; SET} //は大型化取り除くコードテーブルコード大型化注意
:2つの参照 https://dev.azureを.COM / pawelgerr / _git / Thinktecture.EntityFrameworkCore ;または: https://github.com/yangzhinong/Thinktecture.EntityFrameworkCore DLLにコンパイル
ConfigureServicesメソッドが追加さ:
services.AddDbContext <SalesDbContext>(オプション=> {
options.UseSqlServer(_appConfiguration.GetConnectionString( "デフォルト")は、オプト=> {
opts.AddTempTableSupport();
});
});
3.インターフェースと共通リポジトリの実装を定義
3.1パブリックインターフェイスITempTableRepository {
IQueryable <T> FromLocalList <T>(のIList <T>データ)ここで、T:クラス。
タスク<のIQueryable <T >> BulkInsertIntoTempTableAsync <T>(IEnumerableを<T>エンティティ)ここで、T:クラス。
}
3.2パブリッククラスTempTableRepository:SalesRepositoryBase <CodeTemplate <GUID>、GUID>、ITempTableRepository {
3.2パブリッククラスTempTableRepository:SalesRepositoryBase <CodeTemplate <GUID>、GUID>、ITempTableRepository {
公共TempTableRepository(IDbContextProvider <SalesDbContext> dbContextProvider):塩基(dbContextProvider){
}
パブリック非同期タスク<のIQueryable <T >> BulkInsertIntoTempTableAsync <T>(IEnumerableを<T>エンティティ)ここで、T:クラス{
VaRのクエリ=はContext.BulkInsertIntoTempTableAsync(エンティティ、新しいSqlTempTableBulkInsertOptionsを(){待ちます
PrimaryKeyCreation = PrimaryKeyCreation.None、
});
クエリを返します。
}
公共のIQueryable <T> FromLocalList <T>(のIList <T>データ)T:クラス{
Context.FromLocalList(データ)を返します。
}
}
3.3 DbContextで定義された
パブリック dbQueryタグ <ImpTestTemp> {ImpTestTempsを取得または設定し}
==========================
3.3 DbContextで定義された
パブリック dbQueryタグ <ImpTestTemp> {ImpTestTempsを取得または設定し}
4は、クラスの注入を使用することができますITempTableRepository
プライベート読み取り専用IObjectMapper _objectMapper。
プライベート読み取り専用IRepository <エリア、GUID> _area。
プライベート読み取り専用ITempTableRepository _tempTableRepository。
公共AreaService(IRepository <エリア、GUID>エリア、IObjectMapper objectMapper、
ITempTableRepository tempTableRepository){
_area =面積;
_objectMapper =オブジェクトマッパー。
_tempTableRepository = tempTableRepository。
}
パブリックタスク非同期<IEnumerableを<GetAreaByParentIdOutput >> GetAreaByParentIdAsync(GUID?PARENTID){
VARはlst =新しいリスト<ImpTestTemp> {
新しいImpTestTemp {ID = 1、エリアID =新しいGUID( "179A9943-EC6C-4923-8B75-00818198008E")、コード= "123"、NAME = "yzn"、Sorce = 98.5メートル}
新しいImpTestTemp {ID = 2、エリアID =新しいGUID( "48E8124C-789B-4158-BE9C-00507403DF7E")、コード= "456"、NAME = "SEQ"、Sorce = 99.4メートル}
}。
VaRのqueryListは= _tempTableRepository.BulkInsertIntoTempTableAsync(LST)を待つ ; //は、 このデータ多重化方式を使用することができる
VARをqueryList2 = _tempTableRepository.FromLocalList(LST); // この方法は、利用可能なより少ないデータであります
VARをqueryList2 = _tempTableRepository.FromLocalList(LST); // この方法は、利用可能なより少ないデータであります
=(トンからqueryListでVAR efQuery
)(_area.GetAllに参加
t.AreaIdにa.Idに等しいです。
{新しい選択
t.Code、
AreaCode = a.Code、
名前
})ToListメソッド()。
retunヌル。
}
}