gpt4 book ai didi

c# - 以编程方式创建代码优先迁移

转载 作者:可可西里 更新时间:2023-11-01 07:56:52 25 4
gpt4 key购买 nike

我在一个项目中,我们在 Entity Framework 上为我们的数据库使用 Code First。

我们希望更改我们所有的持续集成以在下游使用生成的 MSI 包,但使用 EF 会带来一些复杂情况。

我已经尝试了来自网络的各种方法,但大多数似乎都需要将 AutomaticMigrations 设置为 true 以及 AutomaticMigrationDataLossAllowed(请参阅: http://romiller.com/2012/02/09/running-scripting-migrations-from-code/ ).

我试图通过查看 .NET 反射器来复制 Add-Migration 所做的事情,但我似乎无法找到调用命令 System.Data.Entity.Migrations 的方法.AddMigrationCommand 通过 Powershell 调用。

有人对我如何在不做一些非常困惑的事情的情况下接近实现这一目标有任何想法吗?这是我认为很多人都想做/已经做过的事情...

非常感谢!

最佳答案

首先,无法在 visual studio 之外运行 Nuget powershell(它使用 DTE)。此外,您在没有 Visual Studio 的情况下编写的所有内容都需要手动插入到 csproj 中(但这不是一项艰巨的任务)。

为了展示它的工作原理,我向您发送了一些代码行。要测试它们,请创建 MyDll dll(具有上下文和实体的项目测试),然后使用 Enable-Migrations 在 MyDll 上手动启用迁移(只是为了创建 Configuration.cs)。

之后就可以使用这段代码生成源码了

DbConnectionInfo connectionStringInfo = new DbConnectionInfo(
"Server=.;Database=MigrationTest;User=sa;Password=dacambiare", "System.Data.SqlClient"); // We shoud retrieve this from App.config

ToolingFacade toolingFacade = new ToolingFacade(
"MyDll", // MigrationAssemblyName. In this case dll should be located in "C:\\Temp\\MigrationTest" dir
"MyDll", // ContextAssemblyName. Same as above
null,
"C:\\Temp\\MigrationTest", // Where the dlls are located
"C:\\Temp\\MigrationTest\\App.config", // Insert the right directory and change with Web.config if required
"C:\\Temp\\App_Data",
connectionStringInfo)
{
LogInfoDelegate = s => {Console.WriteLine(s);},
LogWarningDelegate = s => { Console.WriteLine("WARNING: " + s); },
LogVerboseDelegate = s => { Console.WriteLine("VERBOSE: " + s); }
};


ScaffoldedMigration scaffoldedMigration = toolingFacade.Scaffold("MyMigName", "C#", "MyAppNameSpace", false);

Console.WriteLine(scaffoldedMigration.DesignerCode);
Console.WriteLine("==================");
Console.WriteLine(scaffoldedMigration.UserCode);

// Don't forget the resource file that is in the scaffoldedMigration

编辑
我忘记了 namespace 并且不经常使用所以在这里

using System;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations.Design;

关于c# - 以编程方式创建代码优先迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com