.net – 从动态数据站点导出到XML
我必须在实体框架之上更新基于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为我解决了这个问题.
事实证明,我做的事情比需要的更复杂……我从参数开始:
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-part检查Prop.Name以查看它是实体键,实体状态,子集合还是引用,或者它是否只是一个数据字段.这允许我生成实用的XML输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |