EDMX文件中的Schema XML属性问题

时间:2012-07-23 20:45:45

标签: c# entity-framework t4 edmx edmx-designer

我正在使用从EDMX文件生成POCO的T4模板。

所有底层实体都有自己的架构。 That answer描述了如何从EDMX中提取模式名称:

StoreItemCollection sic;
loader.TryCreateStoreItemCollection(inputFile, out sic);
EntityContainer sicEntityContainer = sic.GetItems<EntityContainer>().First();

EntitySet eset = sicEntityContainer.GetEntitySetByName(code.Escape(entity), true);
string schemaName = eset.MetadataProperties["Schema"].Value.ToString();

如果我查看EDMX文件的内容,我发现每个实体都有 Schema 属性:

<EntitySet Name="Table_1"
           EntityType="TestModel.Store.Table_1"
           store:Type="Tables"
           Schema="Blubb" />

此时一切正常,我可以提取模式名称。

这里有问题:

由于一个月或两个月,Visual Studio 2010会将名为 store 的前缀添加到模型中较新实体的 Schema 属性中。

<EntitySet Name="Table_1"
           EntityType="TestModel.Store.Table_1"
           store:Type="Tables"
           store:Schema="Blubb" />

所以我无法通过使用上层链接文章的逻辑来提取架构。

我必须手动使用文本编辑器删除这些前缀,这样一切都可以正常工作。

我的问题:

  1. 这是什么原因?
  2. 如何读取名称如 store:Schema
  3. 的属性?

2 个答案:

答案 0 :(得分:1)

您需要在“Type / Schema”前加上其命名空间

即:

 eset.MetadataProperties["http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator:Type"].Value.ToString(); 
 eset.MetadataProperties["http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator:Schema"].Value.ToString(); 

答案 1 :(得分:0)

不确定这是否会有所帮助,请参阅http://brewdawg.github.io/Tiraggo.Edmx/,您可以从NuGet安装它。它提供edmx文件中的所有元数据,包括所有映射,每列的低级SQL数据类型,所有类型的东西,查看页面上的示例,您将看到它是多么容易。