0
我構建一個存儲庫就像Codefirst演示。entityframework搜索值只搜索不更新
public virtual IQueryable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query);
}
else
{
return query;
}
}
但是這個搜索有一個問題。
有時候其他人使用'get'函數來搜索值,這個值將被用作其他函數中的參數。
就像這樣:
UserInfoBll userInfoBll = new UserInfoBll();
UserInfo userInfo = userInfoBll.Get(p => p.UserCode == "8001", null, "CorpShop").First();
ConsumeProcess.process(userInfo);
如果在功能ConsumeProcess.process USERINFO值的變化,當我處理savechange。
它會更新我不想更新的東西,所以我想找到一種方法。搜索值僅用於搜索,當值更改時,不更新值。
對於這樣我寫了這個:
public virtual List<TEntity> GetList(Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
List<TEntity> tEntityList = Get(filter, orderBy, includeProperties).ToList();
SetEntityStates(EntityState.Detached, tEntityList);
return tEntityList;
}
protected void SetEntityStates(EntityState entityState, IEnumerable<TEntity> tEntity_params)
{
foreach (TEntity tEntity in tEntity_params)
{
if (tEntity != null)
{
context.Entry(tEntity).State = entityState;
}
}
}
現在不會更新,如果有人改變了搜索的價值。但還有另一個問題。 如果我用這樣的代碼,其中包括財產不能得到
UserInfoBll userInfoBll = new UserInfoBll();
userInfo = userInfoBll.GetList(p => p.UserCode == "8001", null, "CorpShop").First(); // CorpShop is include property
corpShop = userInfo.CorpShop; //userInfo.CorpShop is null
你正在更新你不想更新的值嗎?我想找到問題的根源,而不是像你在'GetList'方法中那樣對抗症狀。什麼是「ConsumeProcess.process」呢? –
@Gert Arnold ConsumeProcess.process不會更改userInfo,但我不知道爲什麼當我啓動savechange函數時。關於userInfo的更新sql已經執行。價值已經改變。所以我認爲原因是搜索值的狀態context.Entry(tEntity).State = EntityState.modify,所以我改變了狀態,因爲如果我想改變值,我應該處理更新函數,而不是改變get函數的值 – user2702915