我正在使用这个代码。
public virtual ObjectQuery<BaseObject> GetTypifiedBDOSet()
{
MethodInfo methodInfo = typeof(ObjectQuery<BaseObject>).GetMethod("OfType", new Type[] { });
MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(new Type[] { BDOType });
ObjectQuery result = genericMethodInfo.Invoke(DBContext.BaseSet, null) as ObjectQuery;
ObjectQuery<BaseObject> objectQuery = result.Cast<BaseObject>() as ObjectQuery<BaseObject>;
return objectQuery;
}
但是我在第 5 行收到对象与目标不匹配的错误。(ObjectQuery 结果...)
我想创建一个动态 ObjectQuery<BaseObject>
包含我的当前查询类型的对象。
如果我动态创建一个存储库,我想从数据库中选择所有具有这种类型的条目。 (基类是 BaseObject!) 我正在使用 TPC 策略 - 每个构造一个表。
在上面的示例之前,我使用了这段代码。
public virtual ObjectQuery<BaseObject> GetTypifiedBDOSet()
{
ObjectContext objectContext = ((IObjectContextAdapter)DBContext).ObjectContext;
ObjectSet<BaseObject> objectSet = objectContext.CreateObjectSet<BaseObject>();
return objectSet;
}
但问题是我从数据库中获取了所有条目,例如“博客”、“帖子”和“评论”。
但我只想要 OfType<BDOType>
条目。 (BDOType 可以是“博客”、“帖子”或“评论”的类型)
提前致谢!
最佳答案
啊!几个小时的测试工作:D
public virtual ObjectQuery<BaseObject> GetTypifiedBDOSet()
{
ObjectSet<BaseObject> objectSet = ((IObjectContextAdapter)DBContext).ObjectContext.CreateObjectSet<BaseObject>();
MethodInfo methodInfo = objectSet.GetType().GetMethod("OfType", new Type[] { });
ObjectQuery result = methodInfo.MakeGenericMethod(new Type[] { BDOType }).Invoke(objectSet, null) as ObjectQuery;
return (ObjectQuery<BaseObject>)result.OfType<BaseObject>();
}
关于c# - Entity Framework 6 - 创建动态存储库不工作/对象不匹配目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739064/