我们有一组观点(很多)我们试图在实体框架中实现它们之间的关系。这些视图定义了主键,但出于某种原因,当我为它们创建实体模型时,我收到了消息:
表/视图'vwFoo'没有 主键定义。关键是 推断和定义是 创建为只读表/视图。
除了将它们设为只读(我们不想要)之外,关系不会被保留。有没有办法让这些正确加载到模型中?
后端数据库是SQL Server 2005,但我们还需要支持2000。
任何帮助将不胜感激,
更新&解
这是一个XSLT转换,它成功地将两个视图从EDMX转换为表格。它有两个问题:1)添加错误的xmlns =“”属性,2)没有正确设置UTF-8编码。我在一个单独的Perl脚本中修复了这两个。
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"
xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
xmlns:ssdl="http://schemas.microsoft.com/ado/2006/04/edm/ssdl"
xmlns:edm="http://schemas.microsoft.com/ado/2006/04/edm"
xmlns:cs="urn:schemas-microsoft-com:windows:storage:mapping:CS"
exclude-result-prefixes="ssdl edm store cs" version="1.0">
<xsl:output method="xml"/>
<!-- Copy any nodes that aren't specifically transformed -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- Transform vwPerson -->
<xsl:template match="edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema/ssdl:EntityType[@Name='vwPerson']/ssdl:Key">
<Key>
<PropertyRef Name="fkPersonID" />
</Key>
</xsl:template>
<xsl:template match="edmx:Edmx/edmx:Runtime/edmx:ConceptualModels/edm:Schema/edm:EntityType[@Name='vwPerson']/edm:Key">
<Key>
<PropertyRef Name="fkPersonID" />
</Key>
</xsl:template>
<xsl:template match="edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema/ssdl:EntityContainer/ssdl:EntitySet[@Name='vwPerson']">
<EntitySet Name="vwPerson"
EntityType="DataMachineModel.Store.vwPerson"
store:Type="Tables"
Schema="dbo" />
</xsl:template>
<!-- Transform vwPersonAddress -->
<xsl:template match="edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema/ssdl:EntityType[@Name='vwPersonAddress']/ssdl:Key">
<Key>
<PropertyRef Name="PersonID" />
</Key>
</xsl:template>
<xsl:template match="edmx:Edmx/edmx:Runtime/edmx:ConceptualModels/edm:Schema/edm:EntityType[@Name='vwPersonAddress']/edm:Key">
<Key>
<PropertyRef Name="PersonID" />
</Key>
</xsl:template>
<xsl:template match="edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema/ssdl:EntityContainer/ssdl:EntitySet[@Name='vwPersonAddress']">
<EntitySet Name="vwPersonAddress"
EntityType="DataMachineModel.Store.vwPersonAddress"
store:Type="Tables"
Schema="dbo" />
</xsl:template>
</xsl:stylesheet>
这似乎可以使视图像表一样起作用;但它不保留它们之间的关系。我尝试通过XSLT在EDMX中添加FK关联,但没有成功。
我们决定从视图中创建真实的表格,并将视图逻辑迁移到一个单独的类中,该类可以过滤我们需要的数据。