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。((

谢谢!大卫。

SQL Server CE Code First迁移问题

所以问题是解决方案在这里创建了一个单独的。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的提示!大卫。