我想在构建应用程序时测试多种方法(数据库优先,模型优先,代码优先)。在使用T4Scaffolding并对DB后修改有很多问题后,我虽然EF不够灵活。现在我发现了一件非常奇怪的事情。我留下了在Web.Config中指定的单个“DefaultConnection”,并指向解决方案的App_Data文件夹中的单个.mdf文件。使用Code-First方法,我创建了我的实体(类),然后是脚手架存储库,上下文,一切似乎都工作得很好,除了我得到的数据是在“删除”之前存储并更新数据库。但是,在检入VS Server Explorer后,数据库只包含用于Identity(用户,角色)的表,这表明实际的数据库位于其他位置。我怀疑它位于'C:\ Users {MyUser} \ AppData \ Local \ Microsoft \ Microsoft SQL Server Local DB \ Instances'。但我无法打开.mdf文件来检查,因为它们已经在使用中。我被卡住了。我的数据在哪里???
忘记提及我的应用程序中有两个上下文,因此我在PM控制台中收到警告:“在程序集中找到了多个上下文类型......”。
Howerver,第一个是'ApplicationDbContext',它只引用Identity DB:
public class ApplicationUser : IdentityUser
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
并且第二个上下文绑定到来自Web.Config的单个数据库连接,并且它具有业务逻辑实体
答案 0 :(得分:1)
这有点奇怪。从Web.Config中选择连接字符串,它必须在那里。请重新检查。此外,默认情况下,EF在App_Data文件夹中创建数据库。所以你可以搜索该文件夹。另外如果您发现使用多个上下文时感觉不舒服,您只需将所有DbSets复制到ApplicationDbContext中,它就可以正常工作。
修改强> 您可以为其他上下文指定相同的CS,例如:
namespace MvcProject
{
public class NorthwindDb : DbContext
{
public NorthwindDb() :
base("DefaultConnection") {}
}
}
这里在调用基类的构造函数时,我们可以传递连接字符串的名称。默认情况下,Identity使用DefaultConnection,我们可以将其设置为上下文。