添加到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