我正在使用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="data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\DATABASE1.MDF;integrated security=True;user instance=True;multipleactiveresultsets=True;App=EntityFramework"" 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文件....我不确定发生了什么?
答案 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);
}