我正在尝试从实体框架读取 EDMX 文件中的实体集。
EDMX 文件(XML 格式)具有以下布局:
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
<edmx:Runtime>
<edmx:ConceptualModels>
<Schema Namespace="Model" Alias="Self" p1:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:p1="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
<EntityContainer Name="EntityModel" p1:LazyLoadingEnabled="true">
<EntitySet Name="TableName" EntityType="Model.TableName" />
我正在使用以下 XPath 来获取 EntityContainer 中的所有 EntitySet 节点:
/edmx:Edmx/edmx:Runtime/edmx:ConceptualModels/Schema/EntityContainer/EntitySet
但我没有得到这个 C# 代码的结果:
XmlDocument xdoc = new XmlDocument("pathtoedmx");
var ns = new XmlNamespaceManager(xdoc.NameTable);
ns.AddNamespace("edmx", "http://schemas.microsoft.com/ado/2009/11/edmx");
ns.AddNamespace("annotation", "http://schemas.microsoft.com/ado/2009/02/edm/annotation");
ns.AddNamespace("p1", "http://schemas.microsoft.com/ado/2009/02/edm/annotation");
ns.AddNamespace("", "http://schemas.microsoft.com/ado/2009/11/edm");
var entitySets = xdoc.SelectNodes("/edmx:Edmx/edmx:Runtime/edmx:ConceptualModels/Schema/EntityContainer/EntitySet", ns);
已经从这个工具 ( http://qutoric.com/xmlquire/ ) 中获得了 XPath,因为我开始不相信自己的 XPath 技能,但它告诉我我已经在使用的相同 XPath。
如果我删除“/Schema/EntityContainer/EntitySet”部分,它会找到“/edmx:Edmx/edmx:Runtime/edmx:ConceptualModels”,但不再尝试指定“edmx”命名空间(“edmx:/Schema ") 但没有区别。
希望你能帮帮我,已经把我的头撞在桌子上了。:)