在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据。 这样可以提高查询的性能。 代码如下: var context = new Entities(connectStr); var contentlist = context.Set<Content>().AsQueryable().AsNoTracking(); 但是如果取到数据后,要对数据做修改并保存,则无法反映到数据库里。 如: var context = new Entities(connectStr); var contentlist = context.Set<Content>().AsQueryable().AsNoTracking(); var content = contentlist.Where(o => o.Id == 18).FirstOrDefault(); content.Id = 19; context.SaveChanges(); 虽然修改后对数据库进行了Commit,再次读取后发现这条数据的Id还是18。
另外如果对通过AsNoTracking得到的数据做删除处理,则会报错。 如: var context = new Entities(connectStr); var contentlist = context.Set<Content>().AsQueryable().AsNoTracking(); var content = contentlist.Where(o => o.Id == 18).FirstOrDefault(); context.Set<Content>().Remove(content); context.SaveChanges(); 执行后会抛出System.InvalidOperationException异常, 原因是:オブジェクトは ObjectStateManager 内に見つからなかったため削除できません。 中文意思是:因为无法在ObjectStateManager中找到对象,所以无法删除。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论