我正在阅读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 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。