c# - Entity Framework 6 - 创建动态存储库不工作/对象不匹配目标

标签 c# asp.net entity-framework object reflection

我正在使用这个代码。

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/

相关文章:

c# - 通过 C# 代码隐藏将字符串传递给 .ASPX 中的 SQL

jquery - 该页面的状态信息无效并且可能已损坏。 (仅在 IE 中)

c# - ASP.Net 缓存问题/疑问。在何处以及如何缓存。 |服装 ADO.Net 代码

asp.net - 使用哪个 ASP.NET 服务器控件?

c# - 在南希测试自定义 Bootstrap

c# - 从ResXRersourcewriter生成的资源文件创建designer.cs文件

c# - Linq to nhibernate - 其中集合包含具有 id 的对象

entity-framework - LINQPad 4 无法找到 EntityFramework

c# - 如何使用代码优先正确初始化多对多关系

c# - 同一列上具有多个外键的 Entity Framework 核心