2014-02-25 24 views
7

如果我創建一個SQL視圖並編寫一個模型來表示該視圖,我仍然希望它能夠映射到能夠從SQL視圖讀取數據。添加遷移代碼會將此視爲新表,因爲實體框架(版本6)不理解視圖。忽略使用實體框架爲SQL視圖創建/更改模型

是否有我可以分配的屬性,以防止遷移代碼認爲它需要創建一個新表或模型構建器中的某個東西?

+0

[映射數據庫視圖到EF 5.0代碼優先瓦特/遷移](可能重複http://stackoverflow.com/questions/20862807/mapping-database-views-to-ef -5-0-code-first-w-migrations) – Colin

+0

我不認爲這是重複的,我知道我可以使用上/下代碼來控制遷移,但我希望將來的遷移代碼實例不會通過下面@Mashton的建議等屬性評估某些模型(因爲表示已經創建了視圖)。 – Csharpfunbag

回答

0

您可以使用[NotMapped]屬性停止正在被遷移到數據庫創建中的代碼優先類。

+0

NotMapped將導致該屬性不鏈接到它所表示的表中的列,在這種情況下這不是期望的目標。 – Csharpfunbag

1

this SO answer

Add-Migration IgnoreViewClasses –IgnoreChanges 

(Works爲EF 4.3.1+)

創建一個空的遷移,從現在開始忽略任何新創建的類。

2

添加遷移nomaly。和遷移重寫後:

public override void Up() 
{ 
    Sql("CREATE VIEW [viewname] AS SELECT {any select expression} "); 
} 

public override void Down() 
{ 
    Sql("DROP VIEW [viewname]"); 
}