Linq to Entity 查询不能立即显示更新后的数据,在线等 50
最近在做一个项目,第一次使用EntityFrameWork,有个百思不得其解的问题请高手指教。如下面代码所示,测试类里面的查询可以查询到数据,但并不是数据库中最新的数据,...
最近在做一个项目,第一次使用Entity FrameWork,有个百思不得其解的问题请高手指教。如下面代码所示,测试类里面的查询可以查询到数据,但并不是数据库中最新的数据,比如我刚刚修改了字段Sno的值C01为C02,而且保存成功,数据库中值也修改了,但是执行2中的查询时还是C01,事件探测器中SQL脚本我也抓到了,直接用这个SQL脚本在数据库中执行查询时可以正常显示更新后的值C02.实在不知道什么问题,请高手指点下
补充:如果用entity sql 方式查询又是正常的,可以得到更新后的值,写法如3所示
1,查询方法类
public class DaoTemplate
{
[ThreadStatic]
private static ObjectContext _em = null;
private static ObjectContext EM
{
get
{
if (_em == null)
{
_em = Activator.CreateInstance(Type.GetType(ObjectContextType), ConfigurationManager.ConnectionStrings[ConnectionStringKey].ConnectionString) as ObjectContext;
}
return _em;
}
}
public ICollection<T> FindList<T>(string filter, params object[] args) where T : class
{
return (EM.CreateObjectSet<T>() as IQueryable<T>).Where(filter, args).AsEnumerable().ToList();
}
}
2.业务测试类
public void Test
{
DaoTemplate _daoTemplate = new DaoTemplate();
//问题点,得到的数据不是更新后的数据,Sno值还是C01
var rstList = _daoTemplate.FindList<uv_WorkTaskDetail>(filter, args);
}
3,entity sql
var objContact = new DataBase_Entities();
string queryString = @"SELECT Value WT FROM DataBase_Entities.uv_WorkTaskDetail AS WT where WT.TaskID = 23 ";
ObjectQuery<uv_WorkTaskDetail> myQuery = new ObjectQuery<uv_WorkTaskDetail>(queryString, objContact, MergeOption.NoTracking);
//myQuery中可以得到更新后的值 展开
补充:如果用entity sql 方式查询又是正常的,可以得到更新后的值,写法如3所示
1,查询方法类
public class DaoTemplate
{
[ThreadStatic]
private static ObjectContext _em = null;
private static ObjectContext EM
{
get
{
if (_em == null)
{
_em = Activator.CreateInstance(Type.GetType(ObjectContextType), ConfigurationManager.ConnectionStrings[ConnectionStringKey].ConnectionString) as ObjectContext;
}
return _em;
}
}
public ICollection<T> FindList<T>(string filter, params object[] args) where T : class
{
return (EM.CreateObjectSet<T>() as IQueryable<T>).Where(filter, args).AsEnumerable().ToList();
}
}
2.业务测试类
public void Test
{
DaoTemplate _daoTemplate = new DaoTemplate();
//问题点,得到的数据不是更新后的数据,Sno值还是C01
var rstList = _daoTemplate.FindList<uv_WorkTaskDetail>(filter, args);
}
3,entity sql
var objContact = new DataBase_Entities();
string queryString = @"SELECT Value WT FROM DataBase_Entities.uv_WorkTaskDetail AS WT where WT.TaskID = 23 ";
ObjectQuery<uv_WorkTaskDetail> myQuery = new ObjectQuery<uv_WorkTaskDetail>(queryString, objContact, MergeOption.NoTracking);
//myQuery中可以得到更新后的值 展开
4个回答
展开全部
FindList是啥方法?先用 _daoTemplate.toList全部抓出来看看结果正确不
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.缓存 2.全局变量 回收以下IIS 再看看!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关闭缓存功能或者NEW Context再查询
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是不是需要重新从数据库取数据呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询