首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新一条记录会触发Entity Framework6中同一主键之一的所有记录的更改

问更新一条记录会触发Entity Framework6中同一主键之一的所有记录的更改
EN

Stack Overflow用户
提问于 2017-04-08 08:50:30
回答 1查看 26关注 0票数 1

在我的VS项目中,我使用ADO.NET实体数据模型作为本地DB的实体框架。只有一个表包含两个复合主键(UserId、Data)和一个可修改字段(Status)。

问题是,当我试图检索一个特定的记录并修改它的"Status“字段时,同一个UserId的所有"Status”都会改变,而不管它们的数据值。(但是,不同UserId下的记录不受影响。)更新代码如下:

代码语言:javascript
复制
public void updateStatus(string userId, string data, short status)
    using (var context = new MyDBContext()) {
        var data = context.UserDataStatus.Single(s => s.UserId == userId && s.Data == data);
        data.Status = status;
        context.UserImageStatus.Attach(data);
        context.Entry(data).Property(p => p.Status).IsModified = true;
        context.SaveChanges();
    }
}

我尝试了许多不同的方法来更新记录,比如使用.Where().FirstDefault()而不是Single()来检索记录,或者在我的context.UserDataStatus之后添加.AsNoTracking()。然而,它也不起作用。

我发现有时实体框架不能正确处理重复或没有主键的情况,例如,当从同一数据库检索数据时,我必须在查询中添加.AsNoTracking()作为解决办法。我想知道是不是同样的原因导致了更新问题,以及如何解决它?

====

更新:

好吧,最后我发现问题是因为自动生成的EF模型只给出了UserId作为主键。尽管我在.edmx中选择了“从数据库更新模型”,但主键根本没有更新。因此,我转到.edmx模型浏览器,手动更新"Data“字段的属性,问题就解决了。我也不再需要在查询中使用.AsNoTracking()。

EN

回答 1

Stack Overflow用户

发布于 2017-04-08 09:14:22

好吧,最后我发现问题是因为自动生成的EF模型只给出了UserId作为主键。尽管我在.edmx中选择了“从数据库更新模型”,但主键根本没有更新。因此,我转到.edmx模型浏览器,手动更新"Data“字段的属性(将其设置为主键),问题就解决了。我也不再需要在查询中使用.AsNoTracking()。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43289023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档