如何在运行时获取正确的数据库实体?

时间:2012-12-17 18:36:20

标签: visual-studio entity-framework

在我的方法中:

public void DeleteSingleMrTypeByVersionIdAndId<T>(
    int version_id, int child_obj_id, CIHEntities _dbContext)
        where T : MrBase

我想从数据库实体中获取行。所以,我有这个:

IQueryable<T> old_items = _dbContext.???
            .Where(r => r.MrVersionEntityAssoc.Id == version_id)
            .Where(r => r.Id == child_obj_id)
            .Select(r => r);

但是如何编写LINQ语句以便它使用T知道从哪里获取行?

当然,仅将其称为T不起作用。

IQueryable<T> old_items = _dbContext.T
            .Where(r => r.MrVersionEntityAssoc.Id == version_id)
            .Where(r => r.Id == child_obj_id)
            .Select(r => r);

我们正在使用VS2012。

由于 埃里克

1 个答案:

答案 0 :(得分:3)

您正在寻找的方法是Set()

IQueryable<T> old_items = _dbContext.Set<T>()
    .Where(r => r.MrVersionEntityAssoc.Id == version_id)
    .Where(r => r.Id == child_obj_id)
    .Select(r => r);

修改:使用DbContext时,以上内容适用。对于ObjectContext,相应的方法为CreateObjectSet<T>()

IQueryable<T> old_items = _dbContext.CreateObjectSet<T>()
    .Where(r => r.MrVersionEntityAssoc.Id == version_id)
    .Where(r => r.Id == child_obj_id)
    .Select(r => r);