MVC3的数据库连接问题

时间:2011-09-10 18:12:57

标签: asp.net asp.net-mvc-3 entity-framework-4.1

我正在使用MVC3和Code第一种方法。在这种情况下,我必须从现有数据库生成我的实体类。

数据库是

Database1.mdf

一旦我这样做,它就创建了DBEntities并在我的Web.config中添加了一个新的连接字符串,如下所示:

<add name="DATABASE1Entities" connectionString="metadata=res://*/Models.Task.csdl|res://*/Models.Task.ssdl|res://*/Models.Task.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\DATABASE1.MDF;integrated security=True;user instance=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

现在我删除了DB Entities,并提出了自己的DB Context类。

现在,我正在处理以下连接字符串:

<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DATABASE1.mdf;User Instance=true" providerName="System.Data.SqlClient" />

我的DBcontext类的名称是TaskContext。

我不确定发生了什么事。我的代码有效。但它适用于一些空白数据库,它不反映database.mdf中的任何数据。如果我使用我的控制器添加一些东西,那么我看到添加了一些东西。但它没有反映在Databse1.mdf中。

它看起来创造了一个自己的数据库。但是我没有看到在任何地方创建了andy .sdf或.mdf文件....我不确定发生了什么?

2 个答案:

答案 0 :(得分:2)

尝试使连接字符串和DBContext的名称相同。我相信在某些时候读取EF Code First会使用很多约定,所以如果找不到名为DB Context的连接字符串(在你的情况下是“TaskContext”),它将尝试连接到SQLExpress(无论是否安装了一个)并将尝试查找或创建数据库。

我假设你已经安装了SQLExpress。什么在C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\? (我认为这是路径)你有一个DB坐在那里为这个项目吗?也许像[YourNamespace] .TaskContext.dbf?

答案 1 :(得分:2)

使连接字符串的名称与TaskContext相同:

<add name="TaskContext" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DATABASE1.mdf;User Instance=true" 
    providerName="System.Data.SqlClient" />

OR ,您可以按照以下步骤使用您喜欢的 connectionStringName

1 - 创建TaskContext对象时,请更改 connectionString

var cn = WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
// or
var cn = WebConfigurationManager.ConnectionStrings[0].ConnectionString; // use your connection index instead of 0
var _context = new TaskContext();
_context.Database.Connection.ConnectionString = cn;
您的上下文类(TaskContext)中的

2 - ,您应该告诉 modelBuilder 删除IncludeMetadataConvention 通过这段代码:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    base.OnModelCreating(modelBuilder);
}