プラグイン スタイルの方法論 ( ASP.NET MVC のプラグイン アーキテクチャ) を使用して、EF コードの最初のデータベースにデータを入力するアプリケーションがあります。PreApplicationStartMethod の間に、各プラグイン (dll) からオブジェクトのリストを取得して、エンティティ フレームワークに読み込みます。私はこの一般的なアプローチ(レコードをDBに挿入するための一般的な方法)を使用しようとしていますが、Tはプラグインで指定した特定のタイプではなくオブジェクトであると言われています。その結果、コンテキストにオブジェクト dbset がないため、挿入が失敗します。オブジェクトを手動で元のタイプに変換すると、同じことが起こります。
IModule.cs (メイン プロジェクト) パブリック インターフェイス IModule { List> Entities { get; } }
Module.cs (プラグイン)
public class Module : IModule
{
public List<List<object>> Entities
{
get
{
List<List<object>> entities = new List<List<object>>();
List<object> renderings = new List<object>();
renderings.Add(new FieldRendering(1, "Text", "String"));
renderings.Add(new FieldRendering(2, "Date", "Date"));
renderings.Add(new FieldRendering(3, "Hidden", "Auto"));
entities.Add(renderings);
return entities;
}
}
}
PreApplicationInit (メイン プロジェクト)
[assembly: System.Web.PreApplicationStartMethod(typeof(Core.Modules.PreApplicationInit), "InitializeModules")]
public class PreApplicationInit
{
private static Context context;
public static void InitializeModules()
{
// code to pull in the modules (works, so suppressing for brevity)
context = new Context();
foreach (List<object> section in module.Entities)
{
foreach (object entity in section)
{
// Inspecting the entity object here indicates the correct type (FieldRendering)
Add(entity);
}
context.SaveChanges();
}
}
private static void Add<T>(T entity) where T : class
{
// Inspecting T here indicates the incorrect type (object)
// Code fails here
context.Set<T>().Add(entity);
}
}