添加到Olexander's answer,因爲EF建議您使用工作單元模式,我通常不會在我的方法假定的DbContext - 我通過在最通用的對象可能不是。同樣也是風格問題,我喜歡返回界面。
編輯更新爲包括Olexander使用IQueryable而不是IEnumerable的重要修復。
所以我的方法簽名看起來像:
public IQueryable<IHaveAuthor> Something(int authorId, IQueryable<IHaveAuthor> items)
{
return items.Where(c => c.AuthorId == authorId);
}
所以調用,這將是比你當前呼叫有點不同 - 大概是這樣的:
var db = new MyDbContext();
var items = db.Books;
var itemForAuthor1 = Something(1, items);
否則你的「東西」方法不是非常靈活 - 它假定您當前對象上存在單個現有的DbContext,這可能不是一個安全的假設(因爲它只應該在這個小塊的工作中生存,無論它是什麼),您不能連鎖它與其他命令等
你爲什麼不試試看看是否有可能? – Artless 2013-04-05 22:07:38
我嘗試,我不能這樣Iam問,有可能以其他方式做到這一點,在通用不知道如何知道在哪裏條款 – 2013-04-05 22:08:30
的財產那麼,想想這樣。 BookContext有一個'Book'類型的表,而PeopleContext有一個'Person'類型的表。有了這樣一個函數,你可以讓BookContext給你一個'Person'對象,這會導致一個異常。你想通過這種抽象來實現什麼? – Artless 2013-04-05 22:11:21