Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式运行添加迁移和更新数据库_C#_Entity Framework 6_Database Migration - Fatal编程技术网

C# 以编程方式运行添加迁移和更新数据库

C# 以编程方式运行添加迁移和更新数据库,c#,entity-framework-6,database-migration,C#,Entity Framework 6,Database Migration,希望我所追求的一切都是可能的。我目前正在研究一种方法,当您在VisualStudio中使用PackageManager控制台但在运行时进行迁移时,实体框架代码第一次迁移会做什么。我关注的两个过程是添加迁移和更新数据库 为了进一步解释,我希望能够为模型构建自定义元数据,并将其与现有或不存在的数据库进行比较。这将输出从PackageManager控制台中的AddMigration命令获得的相同迁移文件 在获得一个或多个迁移文件后,我希望在运行时再次运行updatedatabase命令,以编程方式将向

希望我所追求的一切都是可能的。我目前正在研究一种方法,当您在VisualStudio中使用PackageManager控制台但在运行时进行迁移时,实体框架代码第一次迁移会做什么。我关注的两个过程是添加迁移和更新数据库

为了进一步解释,我希望能够为模型构建自定义元数据,并将其与现有或不存在的数据库进行比较。这将输出从PackageManager控制台中的AddMigration命令获得的相同迁移文件

在获得一个或多个迁移文件后,我希望在运行时再次运行updatedatabase命令,以编程方式将向上/向下更改应用于数据库

关键的一点是能够为Add迁移过程提供一个完全定制的(虚拟的?)模型元数据,而不是基于实际的poco类

如果以前有人做过类似的事情,我会很感激有人给我指点该去哪里找,因为我在谷歌/EF文档方面运气不好

编辑:

解决原因:我希望我的用户能够在运行时定义他们的结构。他们将结构定义为变更集的一部分,然后能够将一个或多个变更集应用于基础数据库。本质上,用户可以从web ui执行开发人员从visual studio执行的操作,不同的是类不是.cs文件,而是关系数据库中的类描述

EF似乎非常适合这样做,因为它已经做了我需要它做的一切。我以前做过模式比较和运行时更改机制。既然英孚已经做到了这一点,我不想重新发明轮子。EF代码首先输出的迁移文件也非常适合我要做的事情

我还没有深入研究EF源代码的原因是我想检查是否有其他人曾经尝试过这个,以及他们是否可以共享和指针。一些具体问题:

运行模式比较需要什么类/方法

我如何连接到这个过程中,为“POCO”类提供我自己的元数据

输出检测到的模式更改的选项有哪些(Up、Down和Seed方法)?理想情况下,当用户选择应用更改时,我希望将更改集编译成附属程序集

如何在运行时运行DbMigration实例


我想要一些具体的例子。

为什么会有帮助(可能是你的第四段?),这不是你通常需要的,迁移代码总是手动完成的(当你更改“代码”并生成时),然后根据数据库状态自动“应用”。所以这里有多个角度(代码、数据库、迁移表)。我认为您应该查看代码(EF-6是纯文本的),检查迁移是如何应用和同步的。模型元数据是如何生成的(从代码/POCO生成的),这很复杂,你不想自己去做——但源代码是你最好的朋友,看起来你很深,你需要深入了解。请看我的答案。我已经更新了这个问题以解决“为什么”。谢谢bricelam,你给我的答案的链接,但我恐怕这不是我想要的。你有没有用过这个?不是很遗憾。我在网上搜索EF的源代码,但没有发现任何东西。最终采用了一种不同的(更加手动的)方法。