dav*_*dhq 7 .net c# entity-framework visual-studio ef-migrations
我有一些问题试图为我的桌面.NET应用程序启用SQL Server Compact 4.0数据库的(代码优先)迁移.
Enable-Migrations确实有效,并且Migrations创建了目录.在那之后,当我尝试跑步时Add-Migration InitialMigration,我得到:
不允许访问数据库文件.[1914,文件名= Logo.sdf,SeCreateFile]
这是第一个问题,但我解决它通过运行Visual Studio以管理员身份......不喜欢这种解决办法,也不知以后是否在生产中,将不应用在管理员模式下运行工作.我暂时搁置这个问题......
我的连接字符串:
<add name="LogoContext"
connectionString="Data Source=Logo.sdf"
providerName="System.Data.SqlServerCE.4.0"/>`
Run Code Online (Sandbox Code Playgroud)
因此,Add-Migration InitialMigration在管理员模式下运行后,我得到一个空迁移...没关系.然后我删除迁移并添加一个新类:
using System;
using System.Collections.Generic;
public class Blog
{
public int ID { get; set; }
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我添加了对上下文类的引用:
public class LogoContext : DbContext
{
public DbSet<Word> Words { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Blog> Blogs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后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");
}
}
Run Code Online (Sandbox Code Playgroud)
跑完后Update-Database我看到:
Applying code-based migrations: [201304211225255_InitialMigration].
Applying code-based migration: 201304211225255_InitialMigration.
Running Seed method.
Run Code Online (Sandbox Code Playgroud)
现在出现问题 - 在我的服务器资源管理器中,我检查数据库Logo.sdf,它不包括表Blogs!我甚至尝试从我的应用程序运行此代码:
var db = new LogoContext();
db.Posts.Add(new Blog { Title= "moo" });
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
检查我的服务器资源管理器是否没有显示表..但我得到一个例外:
指定的表不存在.[博客]
所以迁移显然没有应用到我的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"
这是意外和奇怪的恕我直言......
我最终使用这个连接字符串:
<add name="LogoContext" connectionString="Data Source=|DataDirectory|\Logo.sdf" providerName="System.Data.SqlServerCE.4.0"/>
Run Code Online (Sandbox Code Playgroud)
这引用了bin/Debug/Logo.sdf,它在开发期间和单独运行.exe时有效.
这种方式唯一的事情就是我的Logo.sdf项目文件(现在它被复制到Debug"如果更新")现在完全被忽略了.所有迁移都将在Debug文件上运行..这可能也很好....
Thanx Erik提示!大卫
| 归档时间: |
|
| 查看次数: |
4082 次 |
| 最近记录: |