如果我们使用实体框架和代码优先方法,是不是可以在给定路径上创建数据库(Sql Server compact)?

Posted

技术标签:

【中文标题】如果我们使用实体框架和代码优先方法,是不是可以在给定路径上创建数据库(Sql Server compact)?【英文标题】:Is possible to create a database (Sql Server compact) on a given path if we use Entity framework with code-first approach?如果我们使用实体框架和代码优先方法,是否可以在给定路径上创建数据库(Sql Server compact)? 【发布时间】:2011-09-17 23:28:07 【问题描述】:

我对实体框架有点困惑,我想使用代码优先的方法;事实上我想写我的数据库表是如何通过类定义组成的。

主要问题是我需要通过动态选择它的路径来创建(或打开它)数据库(用户可以选择要打开的数据库,并且可以在需要时创建新数据库)。我选择了 Sql server compact 来实现这一点,但是我仍然不明白如何在这种情况下使用代码优先方法,因为我不明白如何选择应该使用代码优先方法创建数据库的位置,如果是可能。

谁能解释我做错了什么并提出不同的路线(如果有的话)?谢谢

【问题讨论】:

【参考方案1】:

几天前我也遇到了同样的问题。这是我如何让它工作的:

在您的应用程序启动代码中添加以下内容:

using System.Data.Entity.Database;

// ...

DbDatabase.SetInitializer(new MyDbInitializer());
DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory(
    "System.Data.SqlServerCe.4.0", 
    @"C:\Path\To\", 
    @"Data Source=C:\Path\To\DbFile.sdf");

初始化程序应该如下所示:

using System.Data.Entity.Database;

public class MyDbInitializer : CreateDatabaseIfNotExists<MyDbContext>

    protected override void Seed(MyDbContext context)
    
        // create some sample data
    

如果 CreateDatabaseIfNotExists 不是您想要的,您可以使用更多种类的初始化程序,或者您也可以创建自己的初始化程序。更多信息可以在这里找到:

http://blog.oneunicorn.com/2011/03/31/configuring-database-initializers-in-a-config-file/

希望这会有所帮助。

【讨论】:

我正在测试,但是我必须等待visual studio sp1安装;我认为这是问题的一部分(我真的在网上挖掘了很多,看起来由于缺少 SP1,我错过了很多东西) 按照你的建议,代码可以工作,但它不会在 SqlCeConnectionFactory 指定的路径上生成任何数据库,不幸的是这就是我需要的,我必须在使用代码时指定路径...啊 DropCreateDatabaseAlways 试试这个! (它对我来说是这样的) 我正在使用它,它不会改变任何东西。但是我注意到我有一个问题:ADO .NET 实体模型模板(单击添加项目时的那个)缺少 SQL Server Compact 4.0 提供程序(而服务器资源管理器有它),我肯定有这个问题,我不知道如何解决:\ 有效!!!我在传递给构造函数的最后一个字符串中缺少数据源......哇,我现在很高兴!

以上是关于如果我们使用实体框架和代码优先方法,是不是可以在给定路径上创建数据库(Sql Server compact)?的主要内容,如果未能解决你的问题,请参考以下文章

使用实体框架代码优先创建文本列[重复]

有没有人将实体框架与代码优先方法与 Edmx 文件混合使用?

实体框架代码优先迁移 - 我可以针对以前的迁移

实体框架 4 代码优先的优缺点 [关闭]

实体框架代码优先的性能

实体框架和代码优先开发