我正在经历ASP.NET MVC 3 tutorial。到了EnityFramework was used for model classes的地步。我在指定的web.config中没有连接字符串的情况下运行了应用程序,但它运行良好。
我可以添加,编辑,删除记录。最奇怪的是,即使在我停止开发服务器并再次开始调试应用程序之后,它们仍然在那里,就好像在内存中的某个地方创建了表并且由于某种原因保持活着。谁能解释一下发生了什么?
这是图片的链接: oi48.tinypic.com/fnbeba.jpg
它是否应该使用名称与从DbContext派生的类的名称匹配的连接字符串?
EDIT1:
因为我在web.config中没有连接字符串,所以它是由Enity Framework使用命名空间生成的,并且是从DBContext派生的类的名称。默认情况下,EF使用SQL Express,因此数据库文件是在数据库服务器的DATA direcotry 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在代码优先模式下使用此连接。
知道为什么不在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请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
答案 0 :(得分:0)
我相信它正在使用SQL Server express,将数据库文件写入应用程序中的app_data目录。
答案 1 :(得分:0)
您的计算机上是否安装了SQL Express?您使用的是哪个版本的Entity Framework?只要我知道实体框架将本地SQL Express作为其默认连接字符串,如果没有提供字符串连接。
答案 2 :(得分:0)
这称为“约定优于配置”,实体框架和MVC使用这个原理很多。基本上,它说,除非你另外给出具体的指示,否则它们将采用各种惯例。
如果您没有为EF提供连接字符串,那么它将使用默认连接字符串,该字符串是从该类的名称和名称生成的。如果你的web.config中不存在,那么它将使用位于C:\ Windows \ Microsoft.NET
文件夹树中的machine.config中定义的DefaultConnection。