2017-11-20 7 views
0

私はEF6で.Net 4.6で動作するコードを持っていますが、ef.coreでは動作しません。コンパイラは、 '設定' は基本的に、私は文字列名によってオブジェクトを取得しています1つの引数(CS1501)タイプによって設定されたエンティティを取得します

Type type = Type.GetType("ContextName.SomeModel"); 
    if (type == null) return null; 

    var entity = db.Set(type).Find(id); 

を取る方法は

過負荷を報告します。どのように.core(v 2.0)でこれを達成するには?

マイ輸入:

using System; 
using System.Collections; 
using System.Collections.Generic; 

using System.Linq; 
using System.Reflection; 

using System.Linq.Dynamic.Core; 
using Microsoft.EntityFrameworkCore; 
using Microsoft.EntityFrameworkCore.ChangeTracking; 
using Microsoft.AspNetCore.Http; 
using Microsoft.AspNetCore.Identity; 
using Shared.Web.MvcExtensions; 
+0

あなたが「動作しません」とはどういう意味ですか?エラーメッセージがありますか?コンパイラは何を言いますか? – CodeNotFound

+0

メソッドSetには1つの引数をとるオーバーロードはありません。 –

+0

'db'変数の作成方法は? – CodeNotFound

答えて

2

EFコアのみジェネリックメソッドSet<T>()を公開します。 EF 6でを使用する場合のように、パラメータとして型を使用するオーバーロードはありません。

エンティティセットからデータを検索する必要があるようです。 EFコアでは、FindのようないくつかのインスタンスメソッドをDbContextクラスに直接公開しているため、単純にしています。

だから、EF 6

var entity = db.Set(type).Find(id); 

で以下のコードは次のようにEFコアに以下のように書き直すことができる:

var entity = db.Find(type, id); 
+0

EFCはこのようなメソッドを 'DbContext'から' '単純化する 'ように公開しているとは思いません。 EFCには汎用的でない 'DbSet'クラスがないため –

関連する問題