繁体   English   中英

C#-Dll插件和实体框架

[英]C# - Dll-Plugin and Entity-Framework

我正在使用一个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 });
            }
        }
    }

但是得到这个异常:

EntityFramework.dll中发生了类型为'System.InvalidOperationException'的未处理异常

附加信息:自创建数据库以来,支持“ DatabaseContext”上下文的模型已更改。 考虑使用Code First Migrations更新数据库( http://go.microsoft.com/fwlink/?LinkId=238269 )。

EF可以使用以下示例支持添加动态DBSet。

这个想法是,您可以重载OnModelCreating方法,而不是在Db Context上手动创建DbSet,该方法允许动态构建类型。

请记住,此示例采用了自定义属性PersistentAttribute ,该属性用于注释类,以便此代码找出适合模型生成的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM