2011-02-28 134 views
3

對於我使用實體框架的第一個項目,我選擇使用「模型優先」的方法,其中我設計了我的實體,從中創建一個腳本用於生成所需的數據庫表。這一直奏效良好,直到遇到一種情況,我無法在單個查詢中檢索到我需要的所有數據元素(我的LINQ技能仍然有限)。實體框架 - 混合模型優先和數據庫優先的方法?

因爲我可以很容易地在SQL中編寫我需要的查詢,所以我想知道是否可以爲我的數據庫編寫一個視圖,然後在它的模型中生成一個實體,換句話說,將兩個模型/數據庫方法。對此有何想法?

+0

不是開箱即用,但有第三方工具可讓您混用兩種模式。一個可以做到這一點的工具(有選擇地引入單個更改)是我的加載項中的EFv4'模型比較器',您可以從http://huagati.com/dbmltools/下載並獲得試用許可證。此博客文章更詳細地描述了模型比較器(使用顯示基本功能的截屏視頻):http://huagati.blogspot.com/2010/07/introducing-model-comparer-for-entity.html – KristoferA 2011-03-01 09:45:27

回答

1

您不能混合使用model-first和db-first。一旦手動修改了數據庫,就無法再使用EDMX中的生成數據庫,或者直接刪除在數據庫中執行的更改。

在某些情況下,它可以通過下載Entity Designer Database Generation Power Pack擴展Visual Studio 2010中一起時使用此擴展使用VS 2010高級版或旗艦您可以使用其他數據庫生成的工作流程,哪些是能夠使用VS工具比較T4模板來避免新生成的數據庫與現有的數據庫並只創建ALTER腳本。

但是這仍然很可能不適用於數據庫視圖,因爲關於數據庫視圖的信息存儲在SSDL(存儲模型描述)中。 Model-first不使用視圖,每次重新生成數據庫時,都會創建表而不是視圖。

所以,如果你想運行任意SQL查詢使用ExecuteStoreQuery(只有EF4)或放棄模型第一。

+0

謝謝,它看起來像使用ExecuteStoreQuery()與自定義類將爲我做的伎倆。 – PongGod 2011-03-01 16:50:22

1

你知道SqlQuery()方法嗎?

ctx.Listings.SqlQuery("SQL Query Here", p1, p2...) 
+0

不,我不是。這是實體框架的一個特點嗎? – PongGod 2011-02-28 22:58:05

+0

是的。它會運行一個自定義查詢,返回表格的行(在我的例子中是Listings表格),然後將它們映射到所有變化粘合等的對象中。 – 2011-02-28 22:59:36

+0

你有更詳細的例子來展示嗎?到目前爲止,我一直無法找到有關此SqlQuery()方法的任何信息。它屬於哪個名稱空間? – PongGod 2011-02-28 23:18:04

相關問題