codefirst数据库迁移
1. Code First 做数据迁移出现错误:类型“Configuration”不是迁移配置类型。
说清楚你的要求,还有要生成的数据库是什么数据库。
上面的提示“
No context type was found in the assembly xxx
”
在当前项目中 没有找到数据库上下文,也就是 DbContext 继承的的 "数据库.cs",你检查一下你的文件。
2. 支持"TestSqlDB"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库
把数据库的冲突的表名字改掉,迁移完成后改回去
3. 关于EF Code First Migrations数据库迁移
update-database 加一个-script 参数, 这样就会生成一个更新脚本, 放到服务器上执行就可以了不过对于数据的冲突还是要手动进行修复比如你重新命名了一个列, 那么要在代码中告诉EF怎么处理, 否则的话它生成的脚本会删除原来的列, 然后重新建一个列,这样数据就丢了
4. code first发布后怎么初始化数据库
seed函数内容添加的时候,你的codefirst
代码没有更新,所以Seed函数没有被调用。
Migration
只检查数据库的机构有没有发生变化,如果发生了变化,它会调用Seed方法重新初始化数据库。但是如果数据库已经存在而且与你的当前代码一致
5. EF CodeFirst 怎么来更新已存在的数据库结构
本地更新或者开发环境可以直接连上数据库的,直接在Package Manager Console(包管理器控制台)输入:update-database -〉回车执行OK
自动更新方法:
在程序初次运行时增加Database.SetInitializer(new <DbContext, Configuration>());
DbContext是你数据库连接的context,
Configuration是你程序Migrations里的,如果不在一个项目里,要将Configuration类改为public。
直接运行程序OK,
有人问web版的怎么弄,放在哪?
找到目录下的Global.asax,加到 Application_Start 里就OK了
6. 如何使用CodeFirst进行数据迁移
如果你还在为 支持xxx上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库 找到你的数据库上下文所在的类库(一般都是写在项目中的model中,也有的独立model类库) 打开Nuget 程序包管理控制台 输入:Enable-Migrations 回车 如果正确的话 则显示已为项目 xxx启用 Code First 迁移。 我在这里说下 几种有可能出现的错误: 1.No context type was found in the assembly xxx 在当前项目中 没有找到数据库上下文,也就是DbContext 继承的的 "数据库.cs" 2.The EntityFramework package is not installed on project xxx 当前项目已经找到了数据上下文,但是没有EntityFrameWork 需要安装输入 install-package entityframework(手大的 不知道对不对) 基本就这两个问题,如果安装成功则在项目中 出现Migrations文件夹,里面会记录每次数据迁移所发生的变化。 非常好用,不用再删除数据库 重新生成 数据丢失等问题。 常用语句 :enable-Migrations -Force 替换迁移数据文件 update-database 更新 add-migration 添加新的更新文件
7. entity framework codefirst 不能创建数据库表。
使用Entity Framework CodeFirst模式创建新数据库
开发环境
Visual Studio 2010 SP1
SQL Server Compact 4.0
演练步骤
打开Visual Studio;
新建Console应用程序Known.EFDemo;
创建Blog模型;public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
}
右击项目->管理NuGet程序包,搜索Entity Framework并安装;或使用程序包管理器控制台运行命令Install-Package EntityFramework;
创建BlogContext;
public class BlogContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
}
修改App.config文件,配置ConnectionString和SQL Server Compact数据提供者工厂;<connectionStrings>
<add name="BlogContext" connectionString="Data Source=|DataDirectory|Blog.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
修改Program并运行,成功后,可以在服务器资源管理器中查看自动生成的表结构及数据。using (var context = new BlogContext())
{
Console.WriteLine("请输入博客名称:");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
blog.Posts = new List<Post>();
Console.WriteLine("请输入随笔标题:");
var title = Console.ReadLine();
Console.WriteLine("请输入随笔内容:");
var content = Console.ReadLine();
blog.Posts.Add(new Post { Title = title, Content = content });
context.Blogs.Add(blog);
context.SaveChanges();
Console.WriteLine("保存成功!");
}
当模型改变时,可以使用命令自动迁移数据库,配置命令:Enable-Migrations –EnableAutomaticMigrations ;更新命令:Update-Database –Verbose 。
8. enable-migrations 包控制台使怎么使用
如果你还在为 支持xxx上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库 找到你的数据库上下文所在的类库(一般都是写在项目中的model中,也有的独立model类库) 打开Nuget 程序包管理控制台 输入:Enable-Migration
9. 奇怪的实体,实体框架代码更新问题,怎么解决
EF本身就是C#中实体和DB的映射,更新实体其实就是更新数据库。
1、
如果是DB FIRST,那么你的实体是跟着DB走的,你必须更新表结构,然后在VS中重新生成模型,实体才会跟着变。
如果只把entity字段改了,那么运行的时候会报错的。
2、如果是codefirst,那么你更新实体之后,EF会更新你的DB结构, 这时候你就需要去选择迁移数据还是重建了。 迁移的教程参考MSDN,命令比较复杂。 重建只需要在初始化器里override方法: DropDatabaseIfModified(如果结构改变则自动重新生成数据库)。