我正在使用FilteredSet從我係統的當前登錄用戶自動獲取數據。它爲我提供了一種動態的方式來返回當前用戶的數據,而不是訪問其他用戶的數據。實體框架代碼首先使用Where子句更新
我想在更新實體時也這樣做。我可以從數據庫中使用FilteredSet獲取實體,如果實體標識不屬於用戶拋出異常,但我寧願不先加載實體,只需附加此實例並進行更新。
到目前爲止,我已經嘗試:
public void UpdateOwnable<TEntity>(TEntity entity) where TEntity : class, IEntity, IUserOwnable
{
var entityLocal = SetOwnable<TEntity>().Local.SingleOrDefault(d => d.Id == entityId);
if (entityLocal==null)
{
entityLocal = this.SetOwnable<TEntity>().Attach(entity);
}
this.ChangeTracker.Entries<TEntity>().Single(d => d.Entity == entityLocal).State = EntityState.Modified;
}
的問題是,生成的查詢不包括WHERE子句。我希望找到一種方法,Where子句不僅是實體的主鍵,還有用戶ID。
Update Workout
SET name ..
WHERE id = 1
AND idUser = 123;
這個SQL查詢是我想讓Entity Framework生成的。使用idUser的「AND」子句。
這可能嗎?
是否有一個原因,你不只是使用.Where LINQ擴展方法?例如:entity.Where(x => x.id == 1 && x.idUser == 123) – Justin 2013-03-21 01:43:30
是的,它需要每個開發者都添加這個條件。如果有人忘記了,這可能是危險的。這就是爲什麼有一個動態的方法來做到這一點很有趣,因爲如果你將你的實體設置爲「標記」爲由用戶「擁有」,它將強制每個訪問鏈接到當前登錄的用戶。下面是一些解釋:http://patrickdesjardins.com/blog/using-a-filtereddbset-with-entity-framework-to-have-dynamic-filtering – 2013-03-21 01:52:55
也不可能在更新中添加Where子句... – 2013-03-21 01:55:31