我遇到了实体框架的问题,因为这是我第一次将它与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实体的教程。我无法弄清楚我在这里做错了什么。
答案 0 :(得分:0)
发生此错误的唯一方法是,表中不存在您要连接的数据库。您用于上下文的连接字符串不正确。如果Web
或App
配置文件中的连接字符串的值错误,或您手动设置该连接字符串并将其设置错误,则可能会发生这种情况。
答案 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;
之后立即将它放在一个好地方。