gpt4 book ai didi

.net - 从动态数据站点导出为 XML

转载 作者:行者123 更新时间:2023-12-04 15:47:50 25 4
gpt4 key购买 nike

我必须更新基于 Entity Framework 之上的 DDS 的现有站点,它使用来自三个不同数据库的三个不同数据库模型。它需要的是对 ListDetails 页面的简单添加:导出到 XML 按钮...
添加按钮很容易。创建 XML 也不难。挑战在于获取要导出的正确表、遍历所有记录和字段并基于系统中 100 多个表中的任何一个生成 XML!
因此,我的按钮调用导出 (ashx) 处理程序,该处理程序根据通过其参数接收的表的名称生成 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项目,不能修改太多,也不能升级......

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

最佳答案

事实证明,我让事情变得比需要的更复杂......我从参数开始:

        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
}
}

Blah 部分检查 Prop.Name 以查看它是否是实体键、实体状态、子集合或引用,或者它是否只是一个数据字段。这使我能够生成实用的 XML 输出。

关于.net - 从动态数据站点导出为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com