c# - Entity Framework 的通用存储库方法出错

标签 c# .net entity-framework

我正在尝试创建一个通用方法以在我的存储库的基类中使用,但我遇到了问题。这是方法...

        public virtual T First(System.Linq.Expressions.Expression<Func<T, bool>> where, List<string> properties)
    {
        IQueryable<T> query = null;
        if (where != null)
        {
            query = _context.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name.ToString())).Where(where);
        }
        else
        {
            query = _context.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name.ToString()));
        }

        foreach (string s in properties)
        {
            query = query.Include(s);
        }

        T _result = (T)query.First();

        return _result;
    }

当我运行代码时,出现以下错误:

'Company' could not be resolved in the current scope or context. Make sure that all referenced variables are in scope, that required schemas are loaded, and that namespaces are referenced correctly. Near escaped identifier, line 1, column 1.

我知道为什么会这样,只是不知道如何解决。我认为这样做是因为我的 ObjectContext 不知道对象“公司”,但它确实知道“公司”。关于如何解决此问题的任何想法?

错误发生在这一行:

T _result = (T)query.First();

谢谢!

最佳答案

Dan,使用如下内容获取实体集名称:

string entitySetName = context.MetadataWorkspace
                        .GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace)
                        .BaseEntitySets.Where(bes => bes.ElementType.Name == typeof(T).Name).First().Name;

string name = String.Format("{0}.{1}", context.DefaultContainerName, entitySetName);

query = context.CreateQuery<T>(name).Where(where);

这样做将为查询解析正确的复数名称。

不过,使用 Yury 的方法是最好的选择。

EDIT 顺便说一句,如果查询没有返回任何实体(它将抛出一个 InvalidOperationException)。

关于c# - Entity Framework 的通用存储库方法出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3247288/

相关文章:

c# - 为什么 C# 中的 sin(x) 函数返回 NaN 而不是数字

c# - 为什么允许 "long value"等于 null?

c# - 无法从 XML (web.config) 获取两个连接字符串

.net - 获取与Webbrowser文档中的XPath表达式匹配的所有元素

c# - 从单个域管理员帐户使用 O365 REST API 访问另一个用户日历

c# - 如何测试返回 Ok(new { token = tokenStr }); 的函数

c# - 如何在 List<T>.RemoveAll 方法不删除任何内容时抛出异常?

c# - 使用按日期/月份分组的日期期间操作列表中的数据

c# - 更改外键约束命名约定

c# - 使查询表达式忽略时间并仅过滤日期