相关疑难解决方法(0)

MVC3和Code First Migrations - "创建数据库后,支持'blah'上下文的模型已经改变"

我使用Entity Framework Code First开始了我的项目.当我准备好时,我将我的数据库和代码上传到我的主机提供商.一切正常.

我需要在我的一个类中添加一个新字段,我不想丢失数据库中的数据.因此,我尝试了一些关于使用Code First Migrations的博客文章.我做了以下事情:

  1. 我备份了我的远程(生产)数据库.
  2. 我在本地附加了这个数据库
  3. 我把这个属性添加到了我的班级
  4. PM>启用 - 迁移
  5. PM> Add-Migration AddSortOrderToCar
  6. PM>更新 - 数据库
  7. 此时,我创建了本地数据库的.bak文件,然后使用该文件"恢复"到远程文件.
  8. 最后,我将代码发布到远程站点.

当我访问该网站时,我收到以下错误消息:自创建数据库以来,支持'blahblah'上下文的模型已更改.考虑使用Code First Migrations来更新数据库.

我究竟做错了什么?

entity-framework asp.net-mvc-3 ef-migrations

20
推荐指数
1
解决办法
3万
查看次数

VS 2015 ASP.NET Web API(EF6)和Xamarin Enable-Migrations失败

我正在开发一个项目,它将使用ASP.NET Web API作为数据服务,并使用Xamarin便携式应用程序作为客户端.

我正在尝试在Web应用程序中启用迁移,但是我收到以下错误:

Enable-Migrations -enableautomaticmigrations -ContextTypeName MyProject.Models.ApplicationDbContext -ProjectName MyProject -StartupProjectName MyProject.App -Verbose
Using StartUp project 'MyProject.App'.
Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in assembly 
'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=14.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable."
At C:\Users\weitz\.nuget\packages\EntityFramework\6.1.3\tools\EntityFramework.psm1:718 char:5
+     $domain.SetData('project', $project)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SerializationException

Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in assembly 
'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=14.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable."
At C:\Users\weitz\.nuget\packages\EntityFramework\6.1.3\tools\EntityFramework.psm1:719 char:5
+     $domain.SetData('contextProject', $contextProject) …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-migrations asp.net-web-api xamarin.forms

18
推荐指数
1
解决办法
635
查看次数

如何创建初始化程序来创建和迁移mysql数据库?

我一直在学习如何使用EF一个星期左右,我一直坚持创建/更新我的数据库的问题.如果不存在,我可以创建一个初始化器来创建数据库:

static class Program
{
    static void Main()
    {
        Database.SetInitializer<GumpDatabase>(new GumpDatabaseInitializer());
....

class GumpDatabaseInitializer : CreateDatabaseIfNotExists<GumpDatabase>
{
    public GumpDatabaseInitializer()
    {
    }
    protected override void Seed(GumpDatabase context)
    {
        context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX Name ON Stations (Name)");
        // Other stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

或者我可以创建配置来迁移数据库

static class Program
{
    static void Main()
    {
        Database.SetInitializer<GumpDatabase>(new MigrateDatabaseToLatestVersion<GumpDatabase, Configuration>());
....

internal sealed class Configuration : DbMigrationsConfiguration<GumpDatabase>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator()); 
    }

    protected override void Seed(GumpDatabase context)
    {

    }
Run Code Online (Sandbox Code Playgroud)

每个都正常工作,但我还没有想出办法做到这两点.我可以通过更改SetInitializer调用在两个初始化程序之间切换,但是如果我想创建数据库,如果它不存在,并且如果它是我该怎么做的话还要迁移它?我需要创建自定义初始化程序吗?

谢谢

根据NSGaga答案编辑

class …
Run Code Online (Sandbox Code Playgroud)

c# mysql migration initializer entity-framework-4.3

14
推荐指数
1
解决办法
1万
查看次数

如何忽略EF 4.3迁移中的表/类

我正在测试EF 4.3(测试版)

我有一些新的类应该生成db表和列.

从一个旧项目我的架构中有一些旧表,我想通过EF访问.声明所有类.为了访问旧表,有一个映射的poco.

db迁移也尝试创建旧表.

如何设置此类/表不是迁移的一部分,而是ef模型的一部分?

xxx.OnModelCreating()    
{
    modelBuilder.Ignore<myOldTableClass>();    
}
Run Code Online (Sandbox Code Playgroud)

从模型中删除整个类.最后我无法通过dbContext使用它进行访问.

我喜欢使用自动迁移.我尽量避免将旧的db表完全迁移到EF类.(是的,我知道有生成器)有120个表,旧的应用程序仍然使用它们.

一些仅与EF(新应用程序)一起使用的新表.有3个常用的表格.那些不应该创建,但通过ef访问.

c# entity-framework entity-framework-4 ef-migrations

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

在不使用IDbContextFactory的情况下编写第一个自定义连接字符串和迁移代码

我正在尝试编写一个易于理解的DBContext类,它采用自定义连接字符串,可以运行迁移,并且我允许使用包管理器生成迁移.

我好像在四处走动.

我已经能够使用对我来说非常糟糕的代码来使用它.我在关于连接字符串和迁移的这个问题的答案中记录了这一点.

Radek的答案看起来比我的好,但是我发现当我实现它然后尝试在Package Manager中创建一个迁移时,我得到了消息

目标上下文'DataLayer.Context'不可构造.添加默认构造函数或提供IDbContextFactory的实现.

DataLayer.Context我的上下文类在哪里.

我不想提供一个实现IDbContextFactory(并且Radek的答案似乎表明它不需要)

更新:

如果我包含一个没有参数的构造函数,我可以生成一个迁移.例如

public Context() : base("ConnectionStringName") { }
Run Code Online (Sandbox Code Playgroud)

对于我的上下文创建,我在app.config中传递连接字符串的名称

public Context(string connString) : base(connString)
{
    Database.SetInitializer(new CustomInitializer());
    Database.Initialize(true);
}
Run Code Online (Sandbox Code Playgroud)

最后,我既可以生成迁移,也可以为用户选择的数据库运行迁移.

但是:当我删除数据库然后运行我的应用程序时,我遇到了问题.

我正在使用的初始化代码,来自上面的链接

public class CustomInitializer : IDatabaseInitializer<Context>
{       
    public void InitializeDatabase(Context context)
    {
        try
        {
            if (!context.Database.Exists())
            {
                context.Database.Create();
            }
            else
            {
                if (!context.Database.CompatibleWithModel(false))  
                {
                    var configuration = new Configuration();
                    var migrator = new DbMigrator(configuration);
                    migrator.Configuration.TargetDatabase =
                        new DbConnectionInfo(context.Database.Connection.ConnectionString);
                    IEnumerable<string> migrations = migrator.GetPendingMigrations();
                    foreach …
Run Code Online (Sandbox Code Playgroud)

c# migration ef-code-first

8
推荐指数
1
解决办法
6325
查看次数

实体框架代码第一数据库恢复模型

是否可以设置使用Entity Framework 6创建的SQL数据库的恢复模型模式?我知道可以通过以下SQL语句设置它:

ALTER DATABASE [Database_Name] SET RECOVERY SIMPLE;
Run Code Online (Sandbox Code Playgroud)

这似乎很奇怪,这不能被设置为的配置的一部分DbContext-它创建数据库似乎无法控制对象如何它的创建.我期待找到如下内容:

public class MyContext : DbContext
{
    public MyContext(string connectionString) : base(connectionString)
    {
        // This is where I would have expected to be able to set the recovery model type
        Database.RecoveryModel = RecoveryModelType.Simple;
    }
}
Run Code Online (Sandbox Code Playgroud)

我怀疑这是不可能的,因为EF(主要)数据库提供程序不可知和恢复模型是MSSQL特定的,但我希望我错了.

c# sql sql-server entity-framework-6

8
推荐指数
1
解决办法
558
查看次数