2016-09-05 7 views
0

私は、dllファイルを検索して現在のアプリケーションに追加するPluginManagerを使用しています。C# - Dll-PluginとEntity-Framwork

また、Entity Frameworkを使用してオブジェクトとデータベースからテーブルを作成していますが、データベースのオブジェクトをDatabaseContextクラスで宣言する必要があります。

このデータベースのプラグインからいくつかのオブジェクトをどのように保存することができますか?

ありがとうございました!

私はこれを試してみました:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     foreach(PluginDto plugin in BackendContext.Current.PluginManager._plugins) { 
      foreach(Type obj in plugin.plugin.getPluginDatabaseObjects()) 
      { 
       Type typ = typeof(EntityTypeConfiguration<>).MakeGenericType(obj); 

       List<MethodInfo> l = modelBuilder.GetType().GetMethods().ToList<MethodInfo>(); 

       MethodInfo m_Entitiy = modelBuilder.GetType().GetMethod("Entity").MakeGenericMethod(new Type[] { obj }); 
       var configObj = m_Entitiy.Invoke(modelBuilder, null); 

       MethodInfo m_ToTable = configObj.GetType().GetMethod("ToTable", new Type[] { typeof(String) }); 
       m_ToTable.Invoke(configObj, new object [] { obj.Name }); 
      } 
     } 
    } 

しかし、この例外を取得:

'System.InvalidOperationException' 種類の未処理の例外がEntityFramework.dll

で発生しました追加情報:モデルがバックアップデータベースが作成されてから 'DatabaseContext'コンテキストが変更されました。コード一次移行を使用してデータベースを更新することを検討してください(http://go.microsoft.com/fwlink/?LinkId=238269)。

+0

[this](http://stackoverflow.com/questions/5308336/how-can-i-create-dbsett-dynamically-inentity-framework)を見ましたか? – bsoulier

+0

@bsoulier私はこれを試しました:そして、このエラーを取得します: "エンティティタイプのフィールドは、現在のコンテキストのモデルの一部ではありません。 – Flo

+0

EFはこのエラーに応じて動的テーブルを実際に行うことはできません。[こちら]をチェックしてください(http://stackoverflow.com/questions/20688922/the-entity-type-type-is-not-part-of-the -model-for-the-current-context) – bsoulier

答えて

0

EFでは、following exampleを使用して動的DBSetsを追加できます。

Dbコンテキストで手動でDbSetsを作成するのではなく、OnModelCreatingメソッドをオーバーロードして、即時に型を構築できるようにすることです。

このサンプルではカスタム属性PersistentAttributeが使用されています。これは、このコードでモデル生成に適したクラスを見つけるためにクラスに注釈を付けるために使用されます。

+0

私はすでにこれを試しました!メインポスト – Flo

+0

を見てくださいこのアプローチでは何が問題になるのでしょうか? – bsoulier

+0

これはうまく動作しますが、新しいクラスを追加すると失敗します – Flo

関連する問題