实体框架无法保存在数据库中

时间:2013-08-23 19:38:08

标签: c# sql-server entity-framework

我遇到了实体框架的问题,因为这是我第一次将它与SQL服务器一起使用。我设法用一个名为EMP的实体成功创建了一个实体数据模型。 EMP将ID,Name和Salary作为标量属性。然后,我从模型生成数据库,将生成的sddl复制/粘贴到SQL服务器并创建我的数据库。我回到VS 2010 express并尝试使用以下代码将一些记录添加到数据库中:

string constr = ConfigurationManager.ConnectionStrings["dataemp"].ConnectionString;
dataemp db = new dataemp(constr);

db.AddToEmps(Emp.CreateEmp(0, "john", "Informatique", "10000000 cfa"));
db.AddToEmps(Emp.CreateEmp(1, "johny greg", "finances", "100000000 cfa"));

db.SaveChanges();//i get the error here
Console.WriteLine(
  "*********Employee actuellement dans la database*********\n{0}",
  query.ToString());

结果,编译器给了我一个例外,好像我没有连接到数据库,或者好像它无法访问数据库,但它显示在数据库资源管理器中。在数据库资源管理器中还有一点:我看不到表(EMP),而在SQL Server中,我可以将其视为dbo.Emps。以下是编译器向我展示的例外情况:

  

未处理的异常:System.Data.UpdateException:发生错误   在更新条目时。有关详细信息,请参阅内部示例。 --->   System.Data.SqlClient.SqlException:无效的对象名称'dbo.Emps'   在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   Boolean breakConnection)at   System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION   exception,Boolean breakConnection)at   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,   SqlCommand cmdHandler,SqlDataReader dataStre am,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   System.Data.SqlClient.SqlDataReader.ConsumeMetaData()中的stateObj)   在System.Data.SqlClient.SqlDataReader.get_MetaData()at   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,   RunBehavior runBehavior,String res etOptionsString)at   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean   async)at   System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Bo olean returnStream,String   方法,DbAsyncResult结果)at   System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Bo olean returnStream,String   方法)at   System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior   行为,String方法)at   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(的CommandBehavior   行为)   System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
  在   System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator   译者,EntityConnec tion连接,字典2 identifierValues, List 1 generatedValues)at   System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager   stateManager,IEntityAdapt er adapter)---内部异常结束   堆栈跟踪--- at   System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager   stateManager,IEntityAdapt er adapter)at   System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager   entityCache)   System.Data.Objects.ObjectContext.SaveChanges(SaveOptions选项)
  在D:\ Users \ ITA中的ConsoleApplication1.Program.Main(String [] args)   最终\ documents \ visual studio 2010 \ Project s \ zut \ zut \ Program.cs:line   13

我已经阅读了很多关于实体框架和linq实体的教程。我无法弄清楚我在这里做错了什么。

2 个答案:

答案 0 :(得分:0)

发生此错误的唯一方法是,表中不存在您要连接的数据库。您用于上下文的连接字符串不正确。如果WebApp配置文件中的连接字符串的值错误,您手动设置该连接字符串并将其设置错误,则可能会发生这种情况。

答案 1 :(得分:0)

鉴于您遇到了数据库中不存在的问题,这表明连接错误,并且给定了连接字符串,

  

的connectionString =“元数据= RES:// /Model1.csdl|res:// /Model1.ssdl|res://*/Model 1.msl;提供商= System.Data .SqlClient提供方   connection string ='数据   源= \ SQLEXPRESS; AttachDbFilename =“d:\用户\ ITA   最终\ Documents \ Visual Studio   2010 \ Projects \ employee.mdf“; Integrated Security = True; Connect   Timeout = 30; User Instance = True; MultipleActiveResultSets = True'“

ADO使用的实际连接字符串是

Data Source=.\SQLEXPRESS;
AttachDbFilename="D:\Users\ITAFinal\Documents\Visual Studio 
    2010\Projects\employee.mdf";
Integrated Security=True;
Connect Timeout=30;
User Instance=True;
MultipleActiveResultSets=True

我想知道为什么连接字符串没有Initial Catalog组件。您应该确定要连接到的MDF文件中的正确数据库,并包括

Initial Catalog=MyDbName;

在字符串中。在Integrated Security=True;之后立即将它放在一个好地方。