gpt4 book ai didi

entity-framework - Entity Framework 和存储库模式问题

转载 作者:行者123 更新时间:2023-12-04 14:36:55 25 4
gpt4 key购买 nike

我正在使用具有方法的通用存储库模式:


 private ObjectQuery<T> ObjectQueryList()
{
var list = CamelTrapEntities.CreateQuery<T>(EntitySetName);
return list;
}


    public IQueryable<T> List()
{
return ObjectQueryList();
}

Metod List() 返回 IQueryable ,因为 IQueryable 很容易模拟。我也有扩展方法:


    public static IQueryable<T> Include<T>(this IQueryable<T> obj, string path)
{
if (obj is ObjectQuery<T>)
(obj as ObjectQuery<T>).Include(path);

return obj;
}

此方法用于在存储库外部获取已加载导航属性的实体列表,例如:List.Include("CreatedBy")。问题是它不起作用。所有包含都被忽略。当我将 List() 方法更改为


    public ObjectQuery<T> List()
{
return ObjectQueryList();
}

一切正常。

我应该如何实现存储库模式才能执行更复杂的查询?

最佳答案

Reflector给了我一个答案:


public ObjectQuery<T> Include(string path)
{
EntityUtil.CheckStringArgument(path, "path");
return new ObjectQuery<T>(base.QueryState.Include<T>((ObjectQuery<T>) this, path));
}

Include 返回新的 ObjectQuery 对象,我的 Include 函数返回旧的对象。更改为


public static IQueryable<T> Include<T>(this IQueryable<T> obj, string path)
{
if (obj is ObjectQuery<T>)
return (obj as ObjectQuery<T>).Include(path);

return obj;
}

解决了这个问题。失去了几个小时,我更讨厌 Entity Framework :)

这也让我意识到我应该使用 Include 参数创建另一个 List 函数,并且不允许在存储库之外执行包含。

关于entity-framework - Entity Framework 和存储库模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com