标签: ef-migrations

MVC 5种子用户和角色

我一直在玩新的MVC 5,我有一些模型,控制器和视图设置使用代码优先迁移.

我的问题是如何为用户和角色提供种子?我目前在Configuration.cs中的Seed方法中播放一些参考数据.但是在我看来,在第一次点击AccountController之前,不会创建用户和角色表.

我目前有两个连接字符串,所以我可以将我的数据从我的身份验证分成不同的数据库.

如何让用户,角色等表格与我的其他人一起填充?而不是当帐户控制器被击中?

asp.net-mvc seeding ef-migrations asp.net-mvc-5

91
推荐指数
4
解决办法
6万
查看次数

无法在实体框架中生成显式迁移

我正在添加新的迁移,但此消息显示:

无法生成显式迁移,因为以下显式迁移正在等待处理:[201203170856167_left].在尝试生成新的显式迁移之前应用挂起的显式迁移.

谁能帮我?

entity-framework ef-migrations

90
推荐指数
10
解决办法
11万
查看次数

如何撤消上次添加迁移命令?

我已使用该Add-Migration命令创建了迁移,但我想更改该迁移的名称.如何撤消迁移命令,以便我可以使用新的所需名称重新生成它?

是否只是删除生成的文件,或者这可能是一个坏主意?

entity-framework ef-migrations entity-framework-5

78
推荐指数
4
解决办法
5万
查看次数

如何从头开始删除和重新创建现有的EF Code First数据库

我在VS 2012中使用EF Code First和EF 5.我使用PM update-database命令,我有一个简单的种子方法来填充一些带有样本数据的表.

我想删除并重新创建我的x.mdb.更新历史记录似乎不同步.如果我在我的上下文中注释掉我的所有DBS,update-database运行时没有错误,但在DB中留下了一些表.由于我在数据库中没有有价值的数据,因此最简单的方法是重置所有内容.

我怎么能做到这一点?

ef-code-first ef-migrations

70
推荐指数
7
解决办法
8万
查看次数

如何在Entity Framework 6.0中禁用迁移

我试图忽略使用Entity Framework 6.0 rc1的"自动"迁移.我的问题是我现在不想要这个功能,每次运行我的应用程序时,我都可以看到所有实体日志都试图创建所有表.

期待感谢.

entity entity-framework ef-migrations

66
推荐指数
3
解决办法
7万
查看次数

实体框架代码优先:迁移失败,更新数据库,强制不必要的(?)添加迁移

我使用迁移(EF 5.0)和代码优先有一个有趣的效果:

我用GUID主键创建了一些模型.(顺便说一句:对我来说,SQL Server使用它很重要NEWSEQUENTIALID(),这似乎是当前版本中的默认值)

在某些时候,我激活了迁移.我在初始迁移中添加了一些代码,这主要是.Index()根据需要.

当我删除数据库并调用update-database时,出现以下错误:

无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移.

我尝试过AutomaticMigrationsEnabled = true,无需更改或添加任何内容即可使用!

但既然我不想要AutomaticMigrationsEnabled,我也尝试再次删除数据库,update-database然后调用add-migration.我最终得到了一个似乎没有改变任何东西的额外迁移(见下文).我也尝试将这些行添加到初始迁移的底部 - 但这并没有改变任何东西.

其中一个型号:

[Table(Speaker.TABLENAME)]
public class Speaker : BaseModel
{
    public const String TABLENAME = "Speaker";

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    [MaxLength(50, ErrorMessage = "Name must be 50 characters or less")]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

初始迁移代码:

public partial class InitialCreate : DbMigration
{
    public override void Up()
    { …
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-migrations

65
推荐指数
2
解决办法
13万
查看次数

在单独的程序集中启用具有上下文的迁移?

我有一个项目,我想update-database反对我,但我在一个单独的项目中有我的模型和上下文.

如果我运行,enable-migrations我会收到此错误:在程序集"MyProject"中找不到上下文类型.

这可能是因为我的Context在MyProject.MVC中.

如果我enable-migrations针对MyProject.MVC 运行,我必须添加一个app配置文件.我不想这样做,因为我想在许多项目中使用代码.

那么我可以enable-migrations针对MyProject 运行并以某种方式告诉它在MyProject.MVC中查找Context吗?

.net c# entity-framework asp.net-mvc-4 ef-migrations

64
推荐指数
2
解决办法
5万
查看次数

在生产中使用Entity Framework(代码优先)迁移

我只是考虑将EF迁移用于我们的项目,特别是在发布之间的生产中执行模式更改.

我已经看到提到有一个API可以在运行时使用DbMigration该类执行这些迁移,但我找不到任何具体的示例.

理想情况下,我希望DbMigration每个数据库更改一个文件,并在应用程序启动时自动应用这些更改从当前版本到最新版本.

.net entity-framework ef-code-first ef-migrations

63
推荐指数
3
解决办法
4万
查看次数

是否可以使用EF迁移更新生产数据库?

根据这篇博客文章,大多数使用EF迁移的公司都不会使用EF迁移更新生产数据库的数据库模式.相反,博客文章的作者建议使用Schema更新脚本作为部署过程的一部分.

我已经使用Schema更新脚本几年了,当它们工作时,我计划将来使用EF迁移,原因如下:

  • 部署更快,停机时间更短
  • 一个更简单的部署过程
  • 与使用T-SQL相比,现有数据的迁移更容易
  • 等待应用的更改的更易于理解的语法(DbMigration类具有干净的C#语法与传统环境中的clunky T-SQL迁移脚本).
  • 如果新软件版本的部署失败,则可以轻松快速地降级到旧数据库模式的路径

我可以想到的一个原因是,如果数据库模式只是由DBA而不是开发人员改变,那么禁止使用EF来迁移生产数据库.但是,我既是DBA又是开发人员,所以这在我的案例中并不重要.

那么,使用EF更新生产数据库有哪些风险?

编辑:我想补充一点,正如solomon8718已经建议的那样,我总是将生产数据库的新副本提取到我的登台服务器,并在将它们应用到生产服务器之前测试要在登台服务器上应用的EF迁移.对于生产系统的任何架构更新,IMO都是必不可少的,无论我是否使用EF迁移.

c# entity-framework database-schema ef-migrations

62
推荐指数
3
解决办法
2万
查看次数

如何在使用Entity Framework Migrations 4.3时显式命名数据库

我最近开始使用Entity Framework迁移,并注意到在运行Update-Database命令时数据库名称并没有为我提供.

我的连接字符串是:

<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

我第一次运行Update-Database时,我的数据库是用正确的名称TestDB创建的.但是,一旦我对我的某个实体进行了更改,除非我添加一个启动项目名称(我正在使用多项目解决方案),否则它将不再为我更新:

Update-Database -StartUpProjectName "TestDB.Data"
Run Code Online (Sandbox Code Playgroud)

然后,这将创建另一个新的数据库,迁移将始终继续使用.我不介意放入StartUpProjectName命令,但有没有办法覆盖它产生的数据库的默认名称?它始终将数据库创建为

TestDB.Data.DataContext
Run Code Online (Sandbox Code Playgroud)

有没有办法确保传递StartUpProject名称时创建的数据库只是名为TestDB,或者这是使用StartUpProjectName设置的限制?

作为一个注释,我认为我需要指定StartUpProjectName的原因是我有一个多层项目设置.迁移配置文件位于我的"数据"项目中,实体/模型位于我的"域"项目中,等等.我目前在Global.asax.cs文件中也没有任何初始化选项,就像我之前使用过的那样.代码首先是ef 4.2.所以在我的项目中,我只在Data项目中有一个DataContext,在该项目中也有一个迁移配置.

编辑:

自从我最初设置这个问题以来,我偶然发现了在多项目解决方案中命名数据库的"正确"方法.虽然下面的答案将起作用,但它确实意味着您在另一个区域中复制了您的web.config,这不是一个理想的解决方案.相反,您可以通过执行类似的操作将名称放入DbContext(DataContext只是我在项目中使用的名称):

public class DataContext : DbContext
{
    public DataContext() : base("DatabaseNameHere")
    { }

    public DbSet<Table1> Table1 { get; set; }
    public DbSet<Table2> Table2 { get; set; }

    public virtual void Commit()
    {
        base.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

丰富

entity-framework ef-migrations

58
推荐指数
4
解决办法
5万
查看次数