2012-01-26 129 views
0

我正在研究一個asp.net MVC 3 web應用程序,我首先使用數據庫,但是在將數據庫表映射到使用實體框架的實體類後,我正在與這些表進行交互因爲我將通過將數據庫表作爲類對象進行處理,從而以代碼優先的方式進行交互。代碼第一種方法與數據庫第一種方法

因此,將表映射到實體類後,我發現代碼優先方法和數據庫優先級非常相似,但從頭開始編寫實體類(如代碼優先),我已經從現有數據庫創建實體類表 - 這對我來說更容易和更方便。

那麼有沒有特定的情況下,我將無法做一些功能,除非我使用了一種方法,直到現在我找不到任何功能?

回答

1

我認爲CodeFirst的最大侷限性(與ModelFirst/DatabaseFirst方法相比)是您無法將CUD操作映射到存儲過程。如果你不打算這樣做,那麼你應該很好去。 更具體地說 - 你可以在DbSet上使用SqlQuery方法調用存儲過程,這會導致返回的實體被跟蹤,或者在數據庫類上使用更一般的SqlQuery和ExecuteSqlCommand(對於Database.SqlQuery,返回的對象不一定是實體,沒有跟蹤這些對象)。就是這樣。您不能將創建/更新/刪除操作映射到存儲過程。 FunctionImports不支持以及

編輯

這是可能的CUD操作映射到使用DB-1 EDMX預EF 4.1 EF6存儲過程現在

+0

我目前正在通過調用存儲過程來做一些功能,所以你的意思是我不能在代碼優先的方法中使用存儲過程? –

+0

您可以在DbSet上使用SqlQuery方法調用存儲過程,這會導致返回的實體被跟蹤,或者在數據庫類上使用更一般的SqlQuery和ExecuteSqlCommand(對於Database.SqlQuery,返回的對象不一定是實體,並且沒有跟蹤這些實體對象)。就是這樣。您不能將創建/更新/刪除操作映射到存儲過程。 FunctionImports也不受支持。 – Pawel

+0

@Pawel這是很好的信息,你應該把你的答案。 – danludwig

2

已經處理了許多許多的頭痛,我部分代碼優先。但我不會傳福音。

除了帕維爾的回答&評論中提及的直接存儲過程映射&功能導入功能,您將無法更改名稱空間或任何其他代碼生成的文件,當您使用DB-第一。 Afaik所有的文件都嵌套在.tt文件下。如果有方法將它們移動到項目中的邏輯文件夾&名稱空間中,那麼我不知道它。

另外,如果你曾經想將你的DbContext分離成一個單獨的項目從你的實體,我記得這是可能的前EF 4.1。但它更麻煩,因爲每更改一次db都必須在兩個.tt文件上運行自定義工具。使用代碼優先,這是非常簡單的,因爲你正在處理純粹的OOP。

相關問題