1

我想在构建应用程序时测试多种方法(数据库优先,模型优先,代码优先)。在使用T4Scaffolding并且在DB修改后有很多问题之后,我通过EF没有足够的灵活性。现在我发现了一件非常奇怪的事情。我留下了一个在Web.Config中指定的'DefaultConnection',并指向解决方案的App_Data文件夹中的单个.mdf文件。使用代码优先的方法,我创建了我的实体(类),然后是脚手架存储库,上下文,一切似乎都工作得很好,除非我在删除和更新数据库之前就已经存储了数据。但是,在VS Server Explorer中检查之后,数据库仅包含用于Identity(用户,角色)的表,这表明实际的数据库位于其他位置。我怀疑它位于'C:\ Users {MyUser} \ AppData \ Local \ Microsoft \ Microsoft SQL Server本地数据库\实例'。但是我不能打开.mdf文件来检查,因为它们已经被使用了。我被卡住了。我的数据在哪里?LocalDB数据库存储在哪里?

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

Howerver,第一个是“ApplicationDbContext”,它仅涉及身份DB:

public class ApplicationUser : IdentityUser 
{ 
} 

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

和第二上下文被绑定到由该Web.Config中单个DB连接,并且它具有业务逻辑实体

+0

如果您想打开MS服务器使用的.mdf,请首先关闭服务中的SQL服务器服务。此外,打开Management Studio并查看db的属性,您可以找到存储mdf的位置 – apomene

+0

但是当我说'打开'时,我的意思是在服务器资源管理器中打开,该服务器资源管理器使用SQL连接,该服务器无法与服务器停止建立 –

+0

服务器资源管理器?...你指的是哪个客户端程序? – apomene

回答

1

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

编辑: 您可以为您喜欢的其他方面指定了相同的CS:

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

这里同时呼吁基类的构造函数中,我们可以通过连接字符串的名称。默认情况下,Identity使用DefaultConnection,我们可以将其设置为我们的上下文。

+0

我确实检查过,但没有新的东西。来自App_Data的数据库文件与服务器资源管理器中的相同,并且是唯一一个来自Web.Config。整个解决方案中没有其他connectionString属性。但该数据库文件只有Identity表。 –

+0

尝试更改您的其他上下文连接字符串以指向DefaultConnection。 –

+0

但是,如果不在Web.Config中,指定上下文的连接字符串在哪里? –