Tag: ef migrations

EF AddOrUpdate Seed不会更新子实体

我有一些问题种子数据,我能够用一个非常小的应用程序重现问题。 鉴于你有这种种子方法: protected override void Seed(JunkContext context) { context.Junks.AddOrUpdate(x => x.Name, new Junk() { Name = “BANANAS!!”, Item = new JunkItem() { Name = “APPLES!!!” } } ); } 当您在PMC中运行update-database时,所有实体都会成功创建。 好。 但是当你想要更新数据库时,请说你的种子方法现在是这样的: protected override void Seed(JunkContext context) { context.Junks.AddOrUpdate(x => x.Name, new Junk() { Name = “BANANAS!!”, Item = new JunkItem() { Name = “ORANGES!!!” […]

entity framework迁移 – 启用AutoMigrations以及添加的迁移

我正在我的项目中使用Entity Framework 4.3 Migrations。 我想使用自动迁移,这样当我修改我的域对象和我的上下文类时,我的数据库会在运行项目时自动更新。 到目前为止,我有这个工作。 除了自动迁移之外,我还想使用一些添加的迁移,我希望应用程序在运行应用程序时自动跳转到最新版本(基于我添加的迁移)。 为了做到这一点,我把它放在global.asax文件中…… Database.SetInitializer(new MigrateDatabaseToLatestVersion()); 现在这样可行,但是当我这样做时,它不再根据我的域对象自动更新数据库。 我希望能够完全删除数据库,然后运行应用程序并运行所有自动迁移,然后运行我的显式迁移并将数据库升级到最新版本。 我知道我已经在之前的项目中使用了这个,但我不确定在这种情况下我做错了什么。 谢谢

在代码优先环境中从包管理器控制台更新数据库

代码第一环境 我正在尝试从包管理器控制台更新数据库。如果我的Domain类发生更改,我必须删除并创建数据库,而不是删除数据库,我如何更新数据库。 我已经尝试通过阅读谷歌的一些博客。 命令 PM> Install-Package EntityFramework 通过使用此命令,我成功安装了Entity Framework。 PM> Enable-Migrations 通过使用此命令,它在我的项目中创建了迁移文件。 PM> Update-Database 通过使用此命令,我可以更新表,但我有一个问题 。 错误 指定’-Verbose’标志以查看应用于目标数据库的SQL语句。 System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 validation实例名称是否正确,以及SQL Server是否配置为允许远程连接。 怀疑就在这里 有时如果POCO类中只有一个字段发生变化,它可能会更新。 例如,我已经更新了更多的Domain类 ,如何从Package Manager Console更新数据库。 任何的想法 ?

自动化EF-Migrations“Update-Database -Script”

我正在使用EF迁移来跟踪我们的EF代码优先数据库模型的更改。 现在我需要为每次迁移生成一个SQL脚本,以便我可以将这组脚本传递给DBA。 我能用Update-Database -Script …生成SQL脚本Update-Database -Script … 但是,我想自动化这个。 我希望-Script开关接受一个指定SQL编写位置的参数,但事实并非如此。 此外,输出重定向不起作用,因为SQL脚本不会写入STDOUT,而是写入临时文件。 我认为无法从脚本中获取该临时文件。 有关如何自动化迁移 – > SQL脚本生成的任何想法? 也许有一些我不知道的神奇的PowerShell技巧? 编辑:顺便说一句,使用migrate.exe或任何其他“迁移感知”方法不是一个选项,交付SQL脚本是必须的。

如何通过EF迁移将int ID列更改为Guid?

我正在使用EF代码优先方法,并希望将Id字段更改为guid但似乎无法通过以下错误。 这是我的第一次迁移: public partial class CreateDownloadToken : DbMigration { public override void Up() { CreateTable( “dbo.DownloadTokens”, c => new { Id = c.Int(nullable: false, identity: true), FileId = c.Int(), UserId = c.String(nullable: false, maxLength: 128), ValidUntil = c.DateTime(nullable: false), }) .PrimaryKey(t => t.Id) .ForeignKey(“dbo.Files”, t => t.FileId) .ForeignKey(“dbo.Users”, t => t.UserId, cascadeDelete: true) .Index(t => […]

如何在Entity Framework Code First中删除表?

我正在使用Entity Framework和Auto Migrations。 因此,当我向Context添加新模型时,我的数据库会更新并创建新表。 我想要做的是反过来,完全从数据库中删除表。 但是,从Context类中删除定义不起作用。 public class CompanyContext : DbContext { public DbSet Permissions { get; set; } public DbSet Companies { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } } 例如,我想从数据库中删除Company表。 为此,我从CompanyContext类中删除Companies属性。 但是,它不起作用。 如果可能,在EF中删除表并使用自动迁移的正确方法是什么?

entity framework创建空迁移但坚持我的模型不同

今天是悲伤的一天。 今天第一件事我看到EFexception说“ 自创建数据库以来,支持’DomainContext’上下文的模型已经改变了。 ” 它接近午夜,我仍然看到这个错误。 这是我职业生涯的终结 – ( 我很确定模型中没有任何变化,但错误出现了。 我尝试过创建一个新的迁移,它是空的: public void Up() { } public void Down() { } 应用此迁移没有任何好处 – 错误仍然存​​在。 我使用了常见的建议将初始化设置为null: Database.SetInitializer(null); 当我访问数据库时,它使错误消失了。 但这让我非常困扰 – 每当我尝试通过代码运行迁移时,我再次看到类似的错误: var configuration = new Migrations.Configuration(); configuration.TargetDatabase = new DbConnectionInfo(“correct connection string”, “System.Data.SqlClient”); var migrator = new DbMigrator(configuration); migrator.Update(); // <<– exception is thrown here Exception throw如下所示: […]

entity framework迁移不包括DefaultValue数据注释(EF5RC)

我有一个看起来像这样的课程: [Table(“Subscribers”, Schema = “gligoran”)] public class Subscriber { [Key] public string Email { get; set; } [Required] [DefaultValue(true)] public bool Enabled { get; set; } } 创建迁移以包含此类时,我得到: public partial class AddSubscriberClass : DbMigration { public override void Up() { CreateTable( “gligoran.Subscribers”, c => new { Email = c.String(nullable: false, maxLength: 128), Enabled = c.Boolean(nullable: […]

使用EF6加载数据库初始化程序时出错

我一直在努力学习这个教程… http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for -an-asp-net-mvc-application但我一直收到以下错误…… system.invalidoperationexception = {“无法为应用程序配置中指定的DbContext类型’WeddingPreparations.Dal.WeddingContext’设置’WeddingPreparations.Dal.WeddingInitializer,KevinLisaWedding’类型的数据库初始化程序。有关详细信息,请参阅内部exception。”} 内在的例外是…… {“无法从程序集’EntityFramework,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089’加载类型’WeddingPreparations.Dal.WeddingContext’。”:“WeddingPreparations.Dal.WeddingContext”} 堆栈跟踪是…… at System.Data.Entity.Internal.InitializerConfig.TryGetInitializer(Type requiredContextType, String contextTypeName, String initializerTypeName, Boolean isDisabled, Func`1 initializerArgs, Func`3 exceptionMessage) at System.Data.Entity.Internal.InitializerConfig.c__DisplayClass6.b__1(ContextElement e) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) at System.Data.Entity.Internal.InitializerConfig.TryGetInitializerFromEntityFrameworkSection(Type contextType) at System.Data.Entity.Internal.InitializerConfig.TryGetInitializer(Type contextType) at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.GetServiceFactory(Type type, String name) at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.c__DisplayClass1.b__0(Tuple`2 t) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, […]

如何为Entity Framework CodeFirst迁移设置隔离级别

如果针对为SQL Server复制发布的表运行entity framework迁移(自动或显式),则会出现以下错误: 您只能在READ COMMITTED或REPEATABLE READ隔离级别中指定READPAST锁 之前( 此处 )存在一些问题,但它们完全无法解决根本原因: entity framework迁移在Serializable隔离级别运行 (如SQL Server分析器中清楚显示)。 对于结构更改事务,这是一个安全的选择,但它与发布的sql server表不兼容。 与dbContext.SaveChanges()事务中使用的默认READ COMMITED SNAPSHOT级别不同,我还没有找到一种方法来为代码中的迁移实际设置不同的隔离级别: 在Database.Initialize()期间似乎忽略了TransactionScope (设置事务隔离级别的经典方法Database.Initialize() 最近引入的Database.BeginTransaction(isolationLevel)实际上尝试在启动新事务之前初始化数据库,因此无法使用。 已知的解决方法 生成到SQL脚本的所有迁移。 这是有效的,但基于代码的迁移是一个我不想错过的强大工具。 使用显式迁移,并使用类似的方法启动每个Up()和Down()方法 Sql(“set transaction isolation level read committed”); 这很有效,但由于开发人员通常不使用复制数据库,因此不方便且容易出错。