SQL Server CE Code First迁移问题
本文关键字:迁移 问题 First Code Server CE SQL | 更新日期: 2023-09-27 18:10:16
我有一堆问题试图启用(代码优先)迁移我的SQL Server Compact 4.0数据库为我的桌面。net应用程序。
Enable-Migrations
生效,并创建目录Migrations
。之后,当我尝试运行Add-Migration InitialMigration
时,我得到:
不允许访问数据库文件。[1914,文件名= Logo。]自卫队,SeCreateFile]
这是第一个问题,但我通过以管理员身份运行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; }
}
我给context类添加了一个引用:
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
毕竟…至少有一些关于迁移的元数据,但我仍然无法在服务器资源管理器中看到该表。
我使用的是VS 2012和EF 5.0。
请帮助我理解这个…在我看来,有些事情是严重错误的,因为它只适用于SQL Server Express实例,而不是SQL Server CE 4.0。((
谢谢!大卫。
所以问题是解决方案在这里创建了一个单独的。sdf文件:
"C:'Program Files (x86)'Microsoft Visual Studio 11.0'Common7'IDE'Logo.sdf"
这是出乎意料的和奇怪的IMHO…
我最终使用了这个连接字符串:
<add name="LogoContext" connectionString="Data Source=|DataDirectory|'Logo.sdf" providerName="System.Data.SqlServerCE.4.0"/>
引用bin/Debug/Logo。它在开发期间和单独运行.exe时工作。
唯一的事情与这种方式是我的标志。sdf项目文件(被复制到调试"如果更新")现在完全被忽略。所有的迁移都将在Debug文件上运行。这可能也很好....
谢谢Erik的提示!大卫。