多个数据库文件/上下文ASP.NET MVC

时间:2014-04-21 15:26:23

标签: c# asp.net asp.net-mvc entity-framework

我的理解是上下文通过web.config中指定的连接字符串连接到数据库。当我创建新的脚手架时,它会使用新的连接字符串创建新的数据库.mdf文件。我来自rails活动记录,有一个数据库和一个连接字符串。那么为什么asp.net以不同的方式做呢?为什么有多个数据库文件?

此外,我将用户模型的连接字符串更改为名为Toolsite的默认站点数据库,以简化操作并将用户放在与其他所有内容相同的数据库中 -

 public ApplicationDbContext()
        : base("Toolsite")
    {
       System.Diagnostics.Debug.Write(Database.Connection.ConnectionString);

    }

这导致Invalid object name 'dbo.AspNetUsers'.异常,即使表AspNetUsers存在于数据库" ToolSite"中。服务器代码中是否还有其他需要更改的部分?

1 个答案:

答案 0 :(得分:2)

默认的MVC项目脚手架一直是我的宠儿。使用auth创建新的MVC项目时,您将获得一个用户模型和一个应用程序上下文来连接它。从某种意义上说,这很棒,因为它可以让您立即运行项目而无需额外配置。但是,他们愚蠢地决定将用户模型和应用程序上下文放在同一个.cs文件中,因此它使不熟悉设置的开发人员误以为这两者是内在联系的。

实际上,MVC应用程序被设计为具有单个上下文,您实际上应该将模型添加到由scaffold创建的现有上下文,而不是创建新的单独上下文。拥有多个上下文的唯一原因是,如果您真的要处理多个数据库,那么,这只是因为除了特定于应用程序的数据库之外,您还在处理现有的数据库。换句话说,您应该只有一个与迁移相关联的上下文,然后您可能有或没有其他在数据库优先的基础上运行的上下文。一旦你理解了这一点,使用脚手架项目就不那么容易混淆了。