gpt4 book ai didi

c# - Entity Framework - DbMigrator 不执行迁移类

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:15 28 4
gpt4 key购买 nike

我在使用 DbMigrator 执行迁移时遇到问题,不知何故迁移类没有执行,当然也没有反射(reflect)在数据库中。

我想要实现的是将我的迁移分组到版本中。基本上我有一个版本基类,所有版本都从中派生。

例如,我有一个类 Version1000,它对应于版本 1.0.0.0。

版本类有一个名为 ExecuteMigrations 的方法,负责执行与其对应的版本相关的迁移。

这是一个版本类的示例(1.0.0.0 的版本为 1000),请参阅使用 DbMigrator 的 ExecuteMigrations 方法,它还使用派生自 DbMigrationsConfiguration 的 VersionConfiguration 类,我在其中设置 namespace 、目录、上下文类型..等..

public class Version1000 : Version
{
public override string VersionNumber
{
get { return "1.0.0.0"; }
}

public static Version Version
{
get
{
return new Version1000();
}
}

public override void ExecuteMigrations()
{
var configuration = new VersionConfiguration();
configuration.TargetDatabase = new DbConnectionInfo(MyCustomContext.CONTEXT_CONNECTION_STRING_NAME);
var migrator = new DbMigrator(configuration);
migrator.Update();
}
}

版本配置类

class VersionConfiguration : DbMigrationsConfiguration<MyCustomContext>
{
public VersionConfiguration()
{
AutomaticMigrationsEnabled = false;
MigrationsNamespace = "Some.Namespace._1000";
MigrationsDirectory = "Migration\\1000";
ContextType = typeof(MyCustomContext);
}

protected override void Seed(MyCustomContext context)
{
base.Seed(context);
}
}

在我的应用程序启动时,我所做的是检查我的数据库的当前版本,然后应用未应用于当前数据库的版本。这是通过调用版本类的 ExecuteMigrations 方法来完成的。

问题是我没有得到任何异常,只是当调用 DbMigrator.Update 方法时更改没​​有反射(reflect)到数据库中,并且 DbMigrationsConfiguration 中设置的文件夹/命名空间中的迁移类从未执行过.

应用程序类型:ASP.NET MVC 4.NET 框架:4.5

最佳答案

您的迁移还应该实现 IVersionMetadata,并且必须提供 Id、Source 和 Target 属性。它们的值应该类似于:

Id = string.Format("{0}_{1}", SomeSequenceNumber.ToString().PadLeft(15, '0'), "Name")
Source = null
Target = "H4sIAAAAAAAEAL1Y23LbNhB970z/gYOn9iGCJEdJ66GSsWW78bSyO6aT1wxErmRMcGEJ0BX7a33oJ/UXuryKF11o2e6bCKx2z1lwD47079//uB/XUjiPEBmu1ZSMBkPigPJ1wNVqSmK7fPMT+fjh++/cy0CunS9l3Ekah99UZkoerA1PKTX+A0hmBpL7kTZ6aQe+lpQFmo6Hw5/paEQBUxDM5TjuXawsl5A94ONMKx9CGzMx1wEIU6zjjpdldW6YBBMyH6Zknpzzv4hzJjjD4h6IJXHCt6efDXg20mrlhcxyJu6TEHB/yYSBAupp+LYv2uE4RUuZUtpiOq2OYksqHsjkEhnbBJlaxhVEGaUpORdMfUsXYW3r4dUXPLBF6CdurI4S4uQbKcGc/6DYudN/Yiven14bLzEW5JTYKN6Qf98L/GhMR8OMvOSrKONuiEPrTGiLSpdliq2JOsf2bhe2d8djazbtV0i2lGnEYNTvkQ4hsskdLAuY8zLhdbAVJz2cojhFRNAjg0sxrrlSZtyGqDhsG+FYEmfO1r+BWtmHKRlPJsS54msIypXijf+sOE4xlNVvYiHYQkC1fxhhC0+d3k44k9H4f4KTCUWJ5Jwrlk5GDQl+3I7k+aXxMYh9W4jhnm6cvE4zygFM626UkuZSWUoq3aGp7pyFIQKtaWyx4ni5wM7eeE9XO5nnoL7ZJ3pVJZQEtoLWbvqOBXDFI2MvmGULlvZiFshOWB/RLEu1tPP1JaghgiWK9HOOJK89SAkO8rhBNemmVPLBftVs1dsc4RV2VYKyWYOh6sUhFe7kyy5eJli0T5NmWsRSHSefu0vUZaZe4UnqupdDLhwN9PnSs9K2RaGev73Xq5BLW4fafsto5zVr3TDtWdh3h7dDquqVnrR0wy1m+LBh6wx1HkIcbMsjD9KBrg+F94eYCY58NwFzpvgSjL3X3wDNZzqFLQN4hDmjxgSih0PralIvm5aN2l6nlrdhSoKFxjskvwC+fq0m6XUl66Uc3WQXtsmLOrpOmac6ui7Opzq6QxmOcnTqkUX+A4u6nq5rCg4COGjYtlbLLNvzqzX8GNZZZJbsB8nWP75E+u2eayuhkyP49LNUXclzaf2XrHsBhq8285P+rlXgp0e+SVrGXKulLkmietTBlCHtFoNlAYrQWWT5kvkWt30wJnOdX5iIMeRSLiC4VrexDWN7ZgzIhUjqVF26v37mG5uY3dswm8uXoIAwOVKAW3UecxFUuK/yU6I9UqR6/AvgejZK6Lox3SqpMt1o1TNR0b4LCEEFeN/cgwwFJjO3ymOPsBvb4R42O+ZecIaTL02RY/P99I8Vmv6z8uE/KRLfnIsRAAA=";

可能需要对 Target 参数进行一些说明:它包含整个模型的压缩版本。他们希望消除在 EF 中提供目标的必要性,但是,即使是 EF6 alpha3 仍然需要这样做。上面给出的字符串是一个空模型的压缩格式,我只是把它作为一个常量,它就像一个魅力......

此外:在我的项目中,我使用了错误的 Id 格式,但它什么也没做。需要尽快在 EF 源中找到更多相关信息,但是,现在这可能对您的情况有所帮助!

关于c# - Entity Framework - DbMigrator 不执行迁移类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15463188/

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