实体框架代码首先不生成数据库

时间:2010-10-07 00:02:25

标签: entity-framework-4

我创建了一个db Context类,并按照Scott Guthrie的Code First Development with Entity Framework 4中的说明在我的web.config文件中添加了一个连接字符串。我是从测试方法运行它。我收到了几个运行测试的数据库错误,但是当我最终清理了类以便测试成功时,我仍然在App_data文件夹中没有数据库。

我将Database.CreateIfNotExists()添加到dbContext构造函数中,但仍然没有sdf文件。谁知道我做错了什么?

4 个答案:

答案 0 :(得分:23)

对于要自动创建的数据库,连接字符串名称必须与DbContext子类名称(带名称空间)完全相同。

EG。假设您的数据库类是这样的:

namespace MyNamespace
{
    public class FooDb : DbContext
    {    
        public DbSet<XXX> ABC{ get; set; }
    }
}

您的连接字符串应如下所示:

  <connectionStrings>
    <add name="MyNamespace.FooDb" connectionString="Data Source=|DataDirectory|MyNamespace.FooDb.sdf" providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>

答案 1 :(得分:3)

检查SQL Server Management Studio - &gt; 。\ sqlexpress

当我没有指定连接字符串时,这就是CF放置所有数据库的地方。

答案 2 :(得分:2)

请参阅此处,了解如何使用EF 4.1和SQL CE NuGet包(或显然是新的MVC 3项目)自动创建.sdf:

http://www.goatly.net/2011/6/27/entity-framework-code-first-the-path-is-not-valid-check-the-directory-for-the-database.aspx

长话短说:创建一个空的App_Data文件夹 - 自动创建sdf,但前提是它所在的文件夹存在。

答案 3 :(得分:0)

确保您的dbcontext使用正确的连接字符串 有点像这样的东西

public class DBContext : IdentityDbContext<ApplicationUser>
    {
        public DBContext ()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }
}

在web.config中

<add name="DefaultConnection" connectionString="Server=....;Connection Timeout=300;" providerName="System.Data.SqlClient" />