EFコアの一時テーブル操作

。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にコンパイル
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 {
        公共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を取得または設定し} 
==========================
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); // この方法は、利用可能なより少ないデータであります 
            =(トンからqueryListでVAR efQuery
                           )(_area.GetAllに参加
                           t.AreaIdにa.Idに等しいです。
                           {新しい選択
                               t.Code、
                               AreaCode = a.Code、
                               名前
                           })ToListメソッド()。
         retunヌル。          
        }
    }

おすすめ

転載: www.cnblogs.com/yangzn/p/11426205.html