使用FirstOrDefault()时,实体框架会更新多个记录

时间:2016-03-04 10:12:46

标签: mysql asp.net-mvc entity-framework

我有一个相当奇怪的问题,此刻正在摸不着头脑。我正在将EF和MySQL一起用于项目,当我想更新数据库中的记录时,就像这样

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 ==&#34; Logo&#34; 的记录都会因某种原因而更新,这意味着它会忽略 d.CompanyName == companyName < / em>部分。任何经历过相同问题或知道如何解决问题的人?

提前致谢。

2 个答案:

答案 0 :(得分:0)

实际上我并不经常使用EF Provider for MySQL,但我认为它有效。

问题可分为两部分,即选择和更新。选择很好,如果你需要查看什么是查询,你可以像这样分割选择语句

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

并查看查询变量(只需将其指向调试模式)。

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

答案 1 :(得分:0)

使用这个我希望这会对你有帮助。

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

                context.SaveChanges();
            }