2

我想测试构建应用程序的多种方法(数据库优先、模型优先、代码优先)。在使用 T4Scaffolding 并且对 DB 后期修改有很多问题之后,我认为 EF 不够灵活。现在我发现了一件很奇怪的事情。我在 Web.Config 中指定了一个“DefaultConnection”,并指向解决方案的 App_Data 文件夹中的单个 .mdf 文件。使用 Code-First 方法,我创建了我的实体(类),然后搭建了存储库、上下文,一切似乎都工作得很好,除了我得到了在我“删除”和更新数据库之前存储的数据。但是,在检查 VS 服务器资源管理器后,数据库只包含用于身份(用户、角色)的表,这表明实际的数据库在其他地方。我怀疑它位于'C:\Users{MyUser}\AppData\Local\Microsoft\Microsoft SQL Server 本地 DB\Instances'。但我无法从那里打开 .mdf 文件进行检查,因为它们已经在使用中。我被困住了。我的数据在哪里???

忘了提到我的应用程序中有两个上下文,因此我在 PM 控制台中收到警告:“在程序集中发现了多个上下文类型......”。

然而,第一个是“ApplicationDbContext”,它只指身份数据库:

public class ApplicationUser : IdentityUser
{
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
}

第二个上下文绑定到来自 Web.Config 的单个数据库连接,它具有业务逻辑实体

4

1 回答 1

1

这有点奇怪。连接字符串是从 Web.Config 中挑选出来的,它必须在那里。请重新检查。此外,默认情况下,EF 在 App_Data 文件夹中创建一个数据库。所以你可以搜索那个文件夹。此外,如果您发现使用多个上下文感到不舒服,您可以简单地将所有 DbSet 复制到 ApplicationDbContext 中,它应该可以正常工作。

编辑: 您可以为其他上下文指定相同的 CS,例如:

namespace MvcProject 
{     
    public class NorthwindDb : DbContext     
    {         
        public NorthwindDb() : 
            base("DefaultConnection") {}
    }
}  

这里在调用基类的构造函数时,我们可以传递连接字符串的名称。默认情况下,Identity 使用 DefaultConnection,我们可以将其设置为我们的上下文。

于 2014-01-31T17:10:15.480 回答