1

我遇到了实体框架的问题,因为这是我第一次将它与 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) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,Boolean breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data .SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStre am, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 System. Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String res etOptionsString)在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔返回流,布尔异步)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔返回流,字符串方法,DbAsyncResult 结果)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior, Bo olean returnStream,String 方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,String 方法)在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior行为)SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为)SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为)
在 System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator 转换器,EntityConnection 连接,字典2 identifierValues, List1 生成值)在 System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter 适配器)- - 内部异常堆栈跟踪结束 --- 在 System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 在 System.Data 的 System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapt er adapter) .Objects.ObjectContext.SaveChanges(SaveOptions options)
在 D:\Users\ITA Final\documents\visual studio 2010\Project s\zut\zut\Program.cs:line 13 中的 ConsoleApplication1.Program.Main(String[] args)

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

4

2 回答 2

0

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

connectionString="metadata=res:// /Model1.csdl|res:// /Model1.ssdl|res://*/Model‌​1.msl;provider=System.Data.SqlClient;provider connection string='数据源=.\SQLEXPRESS;AttachDbFilename="D:\Users\ITA Final\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;将是放置它的好地方。

于 2013-08-23T20:25:52.757 回答
0

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

于 2013-08-23T19:59:50.040 回答