4
我們有一組視圖(很多),我們試圖在實體框架中與它們的關係一起實現。這些視圖具有主鍵定義但由於某種原因,當我爲它們創建我接收到的消息的實體模型:在實體框架中處理視圖關係
表/圖「vwFoo」不具有限定的 主鍵。關鍵是 推斷和定義爲 創建爲只讀表/視圖。
除了使它們成爲只讀的,我們不想要的,關係不會被保留下來。有什麼方法可以正確加載到模型中嗎?
後端數據庫是SQL Server 2005中,但我們還需要支持2000
任何幫助,將不勝感激,
UPDATE & SOLUTION
這裏的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關聯,但沒有成功。
我們已經決定從我們的視圖製作真正的表格,並將視圖邏輯遷移到一個單獨的類中,該類可以對我們需要的數據進行過濾。
此解決方案不起作用,因爲隨着我們的數據庫增長/更改,我需要在每次更新後手動重新調整.edmx文件。 Linq2Sql在這種情況下是更好的選擇嗎?它似乎仍不能保持關係,但我沒有看到PK問題。 – 2010-02-08 17:47:08
不要手動進行。使用XSLT。 – 2010-02-08 17:59:33
這對PKs有效,但我找不到一種方法讓協會工作,所以我們最終重組了我們的數據庫。 – 2010-02-09 17:47:59