我在尝试为 table 面.NET应用程序启用SQL Server Compact 4.0数据库的(代码优先)迁移时遇到了很多问题。Enable-Migrations
确实起作用,并创建了Migrations
目录。之后,当我尝试运行Add-Migration InitialMigration
时,我得到:
这是第一个问题,但是我是通过以管理员身份运行Visual Studio来解决的。我暂时不考虑这个问题...
我的连接字符串:
<add name="LogoContext"
connectionString="Data Source=Logo.sdf"
providerName="System.Data.SqlServerCE.4.0"/>`
因此,在管理员模式下运行
Add-Migration InitialMigration
后,我得到了一个空迁移...没关系。然后删除迁移并添加一个新类:using System;
using System.Collections.Generic;
public class Blog
{
public int ID { get; set; }
public string Title { get; set; }
}
我添加了对上下文类的引用:
public class LogoContext : DbContext
{
public DbSet<Word> Words { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Blog> Blogs { get; set; }
}
然后再次运行
Add-Migration InitialMigration
并获得:public partial class InitialMigration : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Blogs",
c => new
{
ID = c.Int(nullable: false, identity: true),
Content = c.String(maxLength: 4000),
})
.PrimaryKey(t => t.ID);
}
public override void Down()
{
DropTable("dbo.Blogs");
}
}
运行
Update-Database
后,我看到:Applying code-based migrations: [201304211225255_InitialMigration].
Applying code-based migration: 201304211225255_InitialMigration.
Running Seed method.
现在出现了问题-在我的服务器资源管理器中,我检查了数据库
Logo.sdf
,它不包括表Blogs
!我什至尝试从我的应用程序运行以下代码:var db = new LogoContext();
db.Posts.Add(new Blog { Title= "moo" });
db.SaveChanges();
检查也许我的服务器浏览器没有显示表格..但出现异常:
因此,迁移显然没有被应用到我的
Logo.sdf
文件中:(如果我从
app.config
删除连接字符串,则假定与SQL Server Express本地实例的连接。在那里,它可以完美地工作!!当我使用SQL Server Management Studio检查数据库时,我看到了新的Blogs
表以及一个有关迁移元数据的系统表...另一个小信息:
当我尝试再次运行
Update-Database
时,出现“没有基于代码的挂起迁移”。那告诉我毕竟有些数据已经保存到Logo.sdf
了……至少是有关迁移的一些元数据,但是我仍然无法在Server Explorer中看到该表。我正在使用VS 2012和EF 5.0。
请帮助我理解这一点...在我看来,这是严重错误的,因为它仅适用于SQL Server Express实例,但不适用于SQL Server CE 4.0。 :((
谢谢!
大卫
最佳答案
因此,问题在于该解决方案在此处创建了一个单独的.sdf文件:
真是出乎意料和奇怪的恕我直言...
我最终使用了以下连接字符串:
<add name="LogoContext" connectionString="Data Source=|DataDirectory|\Logo.sdf" providerName="System.Data.SqlServerCE.4.0"/>
该引用bin/Debug/Logo.sdf,在开发过程中以及单独运行.exe时都可以使用。
这种方法的唯一作用是现在完全忽略了我的Logo.sdf项目文件(该文件已复制到“如果更新则调试”中)。所有迁移都将在Debug文件上运行。
谢谢埃里克(Thanx Erik)的提示!
大卫
关于c# - SQL Server CE Code First迁移问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16131193/