2010-05-19 55 views
1

我在数据库中使用LINQ to Entities,事先并不知道该结构。我使用反射来检索信息,现在有一个包含所有表名的字符串列表。因为我使用LINQ,我还有封装在C#类(linqContext)中的数据源,每个表都是该类的属性。我想要实现的是: 假设表名列表中的一个字符串是“Employees”。这是已知的代码,我想要做以下事情:C#:当属性标识符被称为字符串时访问类属性

linqContext.Employees.DoSomethingHere(); 

这可能吗?我知道如果所有属性都只是列表中的项目,我可以使用该字符串作为索引器,linqContext["Employees"]。然而,这是不是这样的:(

+0

您可以尝试通过反射找到所需的实体类型,然后使用DataContext类的GetTable方法。 – 2010-05-19 11:30:57

回答

2

首先,我不会使用反射来得到这个信息,我会使用的ObjectContext的MetadataWorkspace财产,因为这已经具备了信息事情是这样的:

EntityContainer container = context.MetadataWorkspace 
    .GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace); 
var setNames = container.BaseEntitySets.Select(b =>b.Name); 

一旦你设定的名称才能摹等一组特定的数据如下:

context.CreateQuery<T>("[" + entitySetName + "]"); 

我实际使用的通用存储库中搜索给定类型匹配的实体集的容器,以便调用代码可以只通过在类型,并取回相应的采集。

0

使用反射要么检索的DataContext的命名属性,或者检索实体类型,然后调用DataContext.GetTable(类型)。

相关问题