2

そこで、テーブル名が文字列であるドメイン データ サービスを動的にロードしようとしています。

 theDomainDataService.Load(theDomainDataService.getUsersQuery());

そのため、文字列名によってどのエンティティが読み込まれるかを自動化しようとしています。

 String theVariableEntityName = "Users";
 Type t = theDomainDataService.GetType();
 MethodInfo stuff = t.GetMethod("Get" + theVariableEntityName + "Query");
 var theQuery = stuff.Invoke(theDomainDataService, null);
 theDomainDataService.Load((EntityQuery<MySite.Web.Models.User>)theQuery);
  ---------------------------------------------------------^ Problem

これは実際には domainDataService を正しくロードしていますが、必要なのは EntityQuery の型を動的に推測する方法です (ユーザーになることを明示的に宣言する必要はありません)。実際には何でもかまいません。

DomainDataService クラスからこれを試してみましたが、うまくいきませんでした。メソッドの「Set」または「Entry」が見つかりません。

    public List<object> void PopulateEntity(string theEntityName)
    {
        Type theEntity = Type.GetType("MySiteMaintenance.Web.Models." + theEntityName);
        using (var db = new DatingEntities()) 
        {                        
              IQueryable query = db.Set(theEntity);
              foreach (var item in query) 
              {
                  var entry = db.Entry(item);
              }
        }
    }

必要なのは、入力されたエンティティ (エンティティの名前しかない場合) が入力されたクライアント側だけであることを忘れないでください...だから私は言うことができます

 DomainServiceClass theClass = new DomainServiceClass();
 theClass.Load(theClass.GetEntityNameQuery());

そのため、適切に読み込まれたエンティティを参照できます... theClass.Entity (ユーザー... 質問など)

4

1 に答える 1

5

フォローするかはまだわかりませんが…

文字列のエンティティ型名を使用してインスタンスから取得した名前空間にエンティティPostがあります...SandboxDbContext

                // Get my entity type (if in same assembly, else you'll have to specify)
                Type postType = Type.GetType("Sandbox.Post");

                using (var db = new StackOverflowEntities()) {                        

                    // not required
                    db.Configuration.ProxyCreationEnabled = false;

                    IQueryable query = db.Set(postType);
                    foreach (var item in query) {

                        DbEntityEntry entry = db.Entry(item);

                    }
                }

その結果、Entity タイプの文字列に基づいて DbSet が取得されます。アイテムの foreach ループのブレークポイントの下 - 値を明らかにします。

ここに画像の説明を入力

于 2013-01-05T20:12:58.003 に答える