C# - Dll-Plugin and Entity-Framework
本文关键字:Entity-Framework and Dll-Plugin | 更新日期: 2023-09-27 18:05:46
我正在使用PluginManager搜索dll文件并将它们(和她的函数)添加到我当前的应用程序。
我还使用实体框架从对象创建数据库和表,但我必须在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)。
EF可以使用下面的示例来支持添加动态dbset。
这个想法是,而不是在你的Db上下文中手动创建你的dbset,你重载OnModelCreating方法,它允许动态构建类型。
请记住,这个示例使用一个自定义属性PersistentAttribute
,用于注释类,以便该代码找出哪些类适合模型生成。