c# - 如果我们使用具有代码优先方法的 Entity Framework ,是否可以在给定路径上创建数据库(Sql Server compact)?

标签 c# entity-framework-4.1 sql-server-ce ef-code-first

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

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

任何人都可以解释我做错了什么并提出不同的路线(如果有的话)吗?谢谢

最佳答案

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

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

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");

Initializer 应该看起来像这样:

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/

希望这对您有所帮助。

关于c# - 如果我们使用具有代码优先方法的 Entity Framework ,是否可以在给定路径上创建数据库(Sql Server compact)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7458513/

相关文章:

c# - GridView:隐藏标题上的排序箭头

c# - 重新附加实体图并检测集合更改

c# - Sql ce 3.0 数据库多用户

c# - 如何确保dll的存在

c# - WPF 启动画面和主窗口加载事件

c# - 递归正则表达式以匹配键和名称

.net - SQL Server CE 和 Visual Studio 2013

c# - EF 代码优先 : Many-to-many with one direction navigation

c# - 为什么 Entity Framework 可以在本地工作但不能在 azure 上工作

c# - sql紧凑中的日期时间问题