6

我必须在实体框架之上更新基于DDS的现有站点,并且它使用来自三个不同数据库的三个不同数据库模型。它需要的是ListDetails页面的简单添加:导出到XML按钮...
添加按钮很容易。创建XML也不困难。面临的挑战是获取适当的表来导出,遍历所有记录和字段,并根据系统中100多个表中的任何一个生成XML!
所以,我的按钮调用一个导出(ashx)处理程序,该处理程序根据通过其参数接收的名称来生成XML。我的代码是这样的:从动态数据站点导出到XML

 Content_CobaEntities Coba = new Content_CobaEntities(); 
     MetadataWorkspace metadataWorkspace = Coba.MetadataWorkspace; 
     EntityContainer container = metadataWorkspace.GetItems<EntityContainer>(DataSpace.CSpace).First(); 
     string namespaceName = metadataWorkspace.GetItems<EntityType>(DataSpace.CSpace).First().NamespaceName; 
     EntitySetBase entitySetBase = container.BaseEntitySets.FirstOrDefault(set => set.ElementType.Name == Entity); 

不幸的是,这只适用于一个上下文,我碰巧有三个。 (但是这是主要的上下文。)(另外,可以使用第二个参数来确定正确的上下文。)虽然它允许我确定需要的实体类型,但它仍然不会让我访问它的记录和田野。

那么,如何获得这个实体的数据? (过滤器不重要;导出将返回所有数据。)

而且不,不是EF4。没有.NET 4。这是一个较旧的VS2008的项目,不能修改太多,也不能升级...


基本上,查询字符串包含两个参数:关联标识符和QueryID。 ContextID告诉我要使用哪个上下文,因为我只有三种不同的上下文,所以简单的switch-command为我解决了这个问题。 但其中一个上下文包含60多个查询,每个查询都与单个数据库表相关。动态数据站点为我提供了添加,编辑和删除该表中的记录的选项,但它需要以我的定制代码指定的格式导出。但是对于60个表格,为每个查询编写switch语句太多了,所以我需要更通用的东西。

+0

你是说你不能连接到主环境以外的另一个EF环境? – WVDominick

+0

实际上,导出处理程序也必须从其他位置可用,并且用户需要能够为其添加书签。我可以得到正确的上下文,但现在我需要循环正确的查询,并使用所有字段和值来生成自定义XML。 –

回答

2

事实证明,我做的事情复杂得多,需要的...我开始与参数:

 string Entity = context.Request.QueryString.Get("Entity"); 
     string ContextID = context.Request.QueryString.Get("Context"); 

然后,我需要确定正确的上下文中使用,这是很容易:

 ObjectContext Context; 
     if (ContextID.Contains("Content_LogEntities")) { Context = new Content_LogEntities(); } 
     else if (ContextID.Contains("Content_CobusEntities")) { Context = new Content_CobusEntities(); } 
     else { Context = new Content_CobaEntities(); }; 

接下来我需要在请求的表中获取正确的数据。也容易:

 ObjectQuery Tabel = Context.CreateQuery<EntityObject>(string.Format("[{0}]", Entity)); 

不知道为什么我试图让这部分比需要更复杂。

剩下的就是通过各个领域走,但我有一个反射变通:

 foreach (var rec in Tabel) 
     { 
      foreach (PropertyInfo Prop in rec.GetType().GetProperties()) 
      { 
       // Blah 
      } 
     } 

的胡说部分检查Prop.Name要看看它的实体键,实体状态,子集或参考,或者它只是一个数据字段。这使我能够生成一个实用的XML输出。