【发布时间】:2017-12-07 05:47:09
【问题描述】:
我陷入了泛型问题。 我有一个基于对象类型从 DbContext 对象返回 DbSet 的方法。
现在我想编写 I 方法,在该方法中传入一个对象,该对象实现了一个名为 IBaseData 的接口(所有实体都实现了该接口)。我想使用现有方法根据 IBaseData 对象的类型返回正确的 DbSet,但我无法让它工作。
我尝试过各种版本的 、typeof 和 gettype。
现有方法:
public GenericRepository<T> GetRepo<T>() where T : class
{
return new GenericRepository<T>(_context);
}
新方法(这正是我想要做的):
public async Task SetDateLastInvoked<T>(IBaseData data, int id)
{
var tmp = GetRepo<typeof(data)>().Where(obj => obj.Id.Equals(id));
tmp.DateLastInvoked = DateTime.Now;
await SaveChangesAsync();
}
【问题讨论】:
-
如果您使用的是 EF,您将遇到的问题是 EF 不支持查询接口属性,至少我上次没有检查过。即使您使用的是泛型方法,这也适用
-
啊欧凯。但是,如果所有实体都派生自一个实现该接口的类呢?所以我不传入接口,而是传入实现它的对象,如果你明白我的意思吗?
-
如果您将泛型类型限制在基本类型而不是接口上,我相信它会起作用,但我还没有测试过
-
如果
data的类型在编译时未知,要调用泛型方法,您需要按照此处所述的反射 stackoverflow.com/questions/232535/… -
data对象进入SetDateLastInvoked的来源是什么?更具体地说,它是否附加到那个点的上下文?
标签: c# entity-framework generics