我正在尝试创建一个通用方法以在我的存储库的基类中使用,但我遇到了问题。这是方法...
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/