我在数据库上使用LINQ to Entities,这个结构事先不知道。我使用反射来检索信息,现在有一个包含所有表名的字符串列表。因为我使用LINQ,所以我还将数据源封装在C#类(linqContext)中,每个表都是该类的属性。
我想要达到的目的是: 假设表名列表中的一个字符串是“Employees”。这在代码中是已知的,我想做以下事情:
linqContext.Employees.DoSomethingHere();
这可能吗?我知道如果所有属性都只是列表中的项目,我可以使用字符串作为索引器linqContext["Employees"]
。但事实并非如此:(
答案 0 :(得分:2)
首先,我不会使用反射来获取此信息,我将使用ObjectContext的MetadataWorkspace属性,因为这已经有了信息。像这样:
EntityContainer container = context.MetadataWorkspace
.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
var setNames = container.BaseEntitySets.Select(b =>b.Name);
获得设置名称后,您可以按如下方式从特定集中获取数据:
context.CreateQuery<T>("[" + entitySetName + "]");
我使用的通用存储库实际上在容器中搜索与给定类型匹配的实体集,以便调用代码只需传入类型并返回相应的集合。
答案 1 :(得分:0)
使用reflection来检索DataContext的命名属性,或者检索实体类型,然后调用DataContext.GetTable(type)。
答案 2 :(得分:-1)