如何在实体框架4 T4脚本中区分Table和View

时间:2012-05-25 23:42:34

标签: entity-framework-4

我有一个EDMX,我已经导入了表和视图。在T4脚本中,这些是通过foreach( EntitySet set in container.BaseEntitySets.OfType<EntitySet>( ) )发现的。

“container”来自foreach (EntityContainer container in GetSourceSchemaTypes<EntityContainer>())

我没有找到EntitySet的任何属性,我可以用它来告诉我它是Table还是View。我该怎么说?

1 个答案:

答案 0 :(得分:1)

这取决于容器。 EntityContainer是通用类,可用于CSpace(CSDL)和SSpace(SSDL)映射元数据。 CSpace描述了您的类模型(您在设计器中看到的内容),SSpace描述了您的表模型(您在数据库中拥有的内容)。在这两者之间有CSSpace(MSL),它描述了从CSpace到SSpace的映射。

不同的空间用于不同的发电机。类生成器使用CSpace,因为它们必须创建与CSpace中定义的实体相同的类。 SQL生成器使用SSpace,因为它们必须使用来自SSpace的正确对象创建SQL。 CSSpace从未用于代码生成,几乎整个实现都不公开。

有关视图的信息存储在EntitySet的{​​{1}}中的SSpace中。如果您在CSpace中工作以生成类,则无法访问此信息,因为来自CSpace的实体不了解其存储。由于CSSpace的API不公开,因此如果不使用某些命名约定(或硬编码解决方案)将实体名称转换为表名,也很难从CSpace空间移动到SSpace。