实体框架SaveChanges无效

时间:2014-01-19 13:02:52

标签: c# .net entity-framework

我有一个C#winforms应用程序和一个SQL Server .mdf数据库文件。

我尝试使用Entity Framework。从数据库中检索数据时效果很好,但在调用.SaveChanges()时没有任何反应。没有错误,没有例外,也没有保存任何更改。

这个问题让我很生气。我发现了一堆几乎同样问题的问题,但这些答案都不适用于我的案例。

我的代码看起来像这样:

using (World_ParkingEntities context = new World_ParkingEntities())
{
   client _client = context.CreateObject<client>();
   _client.name = name;
   _client.mobile_number = phoneNo;
   _client.email = email;
   context.AddToclients(_client);
   context.SaveChanges();
}

我的连接字符串:

<add name="World_ParkingEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\World_Parking.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /></connectionStrings>

1 个答案:

答案 0 :(得分:3)

整个用户实例和AttachDbFileName = 方法存在缺陷 - 充其量!在Visual Studio中运行应用程序时,它将复制.mdf文件(从App_Data目录到输出目录 - 通常是.\bin\debug - 应用程序运行的地方)和最有可能,您的INSERT工作正常 - 但您最后只是查看错误的.mdf文件

如果你想坚持这种方法,那么尝试在context.SaveChanges();调用之后设置一个断点 - 然后用SQL Server Mgmt Studio Express检查.mdf文件 - 我几乎可以肯定你的数据在那里。

我认为真正的解决方案将是

  1. 安装SQL Server Express(你已经完成了)

  2. 安装SQL Server Management Studio Express

  3. SSMS Express 中创建数据库,为其指定一个逻辑名称(例如World_Parking

  4. 使用其逻辑数据库名称(在服务器上创建时给定)连接到它 - 并且不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=World_Parking;Integrated Security=True
    

    其他所有内容都完全与以前相同......