gpt4 book ai didi

sql-server - 在 Entity Framework 中处理 View 关系

转载 作者:太空狗 更新时间:2023-10-30 01:56:52 25 4
gpt4 key购买 nike

我们有一组 View (相当多),我们正尝试在 Entity Framework 中实现它们之间的关系。这些 View 定义了主键,但出于某种原因,当我为它们创建实体模型时,我收到了消息:

The table/view 'vwFoo' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.

除了将它们设置为只读(我们不希望如此)之外,这些关系不会被保留。有什么方法可以让它们正确加载到模型中吗?

后端数据库是SQL Server 2005,但我们也需要支持2000。

如有任何帮助,我们将不胜感激

更新和解决方案

这是一个 XSLT 转换,它成功地将两个 View 从我们的 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>

就 View 的功能而言,这似乎确实有效;但是它不会保留它们之间的关系。我尝试通过 XSLT 在 EDMX 中添加 FK 关联,但没有成功。

我们决定从我们的 View 中创建真实的表格,并将 View 逻辑迁移到一个单独的类中,该类可以过滤我们需要的数据。

最佳答案

是的,EF 设计器无法导出 View 的 PK,所以 you have to help it out .

关于sql-server - 在 Entity Framework 中处理 View 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2223280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com