0

我正在阅读ASP.NET MVC 3 教程到了将EnityFramework 用于模型类的地步。我在 web.config 中没有指定连接字符串的情况下运行了应用程序,并且它工作正常。

我可以添加、编辑、删除记录。最奇怪的是,即使在我停止开发服务器并再次开始调试应用程序之后,它们仍然存在,就好像表是在内存中的某个地方创建的并且由于某种原因而保持活动状态一样。谁能解释发生了什么?

这是图片的链接:oi48.tinypic.com/fnbeba.jpg

是否应该使用名称与从 DbContext 派生的类的名称匹配的连接字符串?

EDIT1:
因为我在 web.config 中没有连接字符串,所以它是由 Enity Framework 使用命名空间和从 DBContext 派生的类的名称生成的。默认情况下,EF 使用 SQL Express,因此数据库文件是在数据库服务器的 DATA 目录 C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA 中创建的。

如果 DBContext 派生类是,我不明白为什么它不会在 App_Data 目录中创建数据库文件的最后一件事

public class MoviesDBContex : DbContext
{
    public DbSet<Movie> Movies { get; set; }
    
    // Passing name of the connections string shouldn't be even necessary
    public MoviesDBContex()
        : base("MoviesDBContex")
    { }
}

和 web.config 包含

  <connectionStrings>
    <add name="MoviesDBContext"
      connectionString="Data Source=|DataDirectory|Movies.sdf"
      providerName="System.Data.SqlClient"/>
  </connectionStrings>

这就是关于 ER 连接和模型的 Microsoft 指南 (msdn.microsoft.com/en-us/data/jj592674.aspx) 所说的:

如果连接字符串的名称与上下文的名称匹配(有或没有命名空间限定),那么在使用无参数构造函数时,DbContext 将找到它。如果连接字符串名称与上下文名称不同,则可以通过将连接字符串名称传递给 DbContext 构造函数来告诉 DbContext 在 Code First 模式下使用此连接。

知道为什么不在 App_Data 中创建数据库文件吗?

EDIT2:
类名中缺少“t”,因此它与连接字符串的名称不匹配。

当提供程序是 SQL Server Compact providerName="System.Data.SqlServerCe.4.0" 时,我确实按预期工作,但是如果我将其更改为 providerName="System.Data.SqlClient",我会在下面添加一个异常。普通的 SQL Server 不应该也可以创建数据库文件吗?

建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

4

3 回答 3

0

我相信它正在使用 SQL Server express,将 DB 文件写入应用程序中的 app_data 目录。

于 2012-10-18T21:15:46.747 回答
0

你的机器上安装了 SQL Express 吗?您使用的是哪个版本的实体框架?只要我知道实体框架将本地 SQL Express 作为其默认连接字符串(如果没有提供字符串连接)。

于 2012-10-18T21:18:44.457 回答
0

这称为“约定优于配置”,Entity Framework 和 MVC 大量使用此原则。基本上,它说除非您另外给出具体说明,否则它们将采用各种约定。

如果您不向 EF 提供连接字符串,则它将使用默认连接字符串,该字符串由类的名称空间和名称生成。如果您的 web.config 中不存在该设置,那么它将使用位于 C:\Windows\Microsoft.NET 文件夹树中的 machine.config 中定义的 DefaultConnection

于 2012-10-18T21:20:57.563 回答