EDMX文件中的架构XML属性存在问题



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

所有底层实体都有自己的模式。这个答案描述了如何从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等名称空间的属性

您需要在"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(); 

不确定这是否有帮助,但可能会有帮助,请参阅http://brewdawg.github.io/Tiraggo.Edmx/你可以从NuGet安装它。它提供edmx文件中的所有元数据,包括所有映射、每列的低级别SQL数据类型等等,看看页面上的示例,你就会发现它有多容易

相关内容

  • 没有找到相关文章

最新更新