Enable-Migrations
可以工作并创建目录 Migrations
。之后,当我尝试运行 Add-Migration InitialMigration
时,我得到以下错误信息:
这是第一个问题,但我通过以管理员身份运行Visual Studio来解决它...不喜欢那个解决方案,也不知道在生产中是否可以在不以管理员模式运行应用程序的情况下正常工作。现在我将暂且搁置这个问题...不允许访问数据库文件。[1914,文件名=Logo.sdf,SeCreateFile]
我的连接字符串:
<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();
我想检查一下我的服务器资源管理器是否显示了表格...但我收到了一个异常:
指定的表不存在。[Blogs]
所以我的迁移显然没有应用到我的 Logo.sdf
文件 :(
如果我从 app.config
中移除连接字符串,就会假定连接到本地安装的 SQL Server Express。在那里它可以完美运行!当我使用 SQL Server Management Studio 检查数据库时,我看到了新的 Blogs
表格和关于迁移的元数据的系统表...
另一个小信息:
当我再次尝试运行 Update-Database
时,我得到了 "No pending code-based migrations." 的消息,这告诉我确实保存了一些数据到 Logo.sdf
中...至少是一些有关迁移的元数据,但仍然无法在服务器资源管理器中看到该表格。
我正在使用 VS 2012 和 EF 5.0。
请帮我理解一下...看起来有严重的问题,因为它只能在 SQL Server Express 实例上工作,而不能在 SQL Server CE 4.0 上工作。:((
谢谢! 大卫