2016-03-04 72 views
0

我有一个相当奇怪的问题,此刻正在挠头。我使用EF加上MySQL的一个项目,当我想这样当使用FirstOrDefault()时,实体框架更新几条记录

using (var context = new MyDbContext()) 
     { 
      var record = (from d in context.Dictionary where d.CompanyName == companyName && d.Name == "Logo" select d).FirstOrDefault(); 
      record.Value = _path; 

      context.SaveChanges(); 
     } 

然后每一个具有d.Name ==“标志”记录在数据库上更新记录获取某种原因更新,这意味着它忽略了d.CompanyName ==公司名称部分。谁遇到过相同的问题或知道如何解决它?

在此先感谢。

+0

请检查comapanyName中的值 –

+0

companyName中的值是只包含一个公司名称的字符串,其中记录应该更新。但由于某种原因,所有其他公司Logo也得到更新 – ccb3

+0

请使用主键更新,而不是更一致的名称.. –

回答

0

其实我并不经常使用EF Provider for MySQL,但我想它是有效的。

该问题可以分为2部分,一个选择和一个更新。选择是好的,如果你需要看到的是你可以分割select语句这样

var query = (from d in context.Dictionary where d.CompanyName == companyName && d.Name == "Logo" select d); 
var record = query.FirstOrDefault(); 

,看一看查询变量(只点在调试模式下)查询。

关于你的问题我可以immagine的唯一原因是你没有以正确的方式配置Dictionary类。
我的意思是,当你运行context.SaveChanges时,使用Dictionary的键定义(查询的Where部分)生成更新查询。如果密钥定义错误,where子句将会出错。

0

使用此我希望这会帮助你。

using (var context = new MyDbContext()) 
      { 
       var record = context.Dictionary.Where(x=> x.CompanyName == companyName && x.Name == "Logo").FirstOrDefault(); 
       record.Value = _path; 

       context.SaveChanges(); 
      } 
+0

这一个不幸的是给出了相同的结果。 – ccb3

+0

怎么可能你通过使用FirstorDefault方法得到多个记录你可以使用yor类名来代替var这样的 字典记录= context.Dictionary.Where(x => x.CompanyName == companyName && x.Name ==“标志“)FirstOrDefault(); –