我們正在重寫現有的內部ASP.NET Web窗體應用程序。我們的應用程序由Web Api後端組成,後端使用Entity Framework 6進行數據訪問,前端使用AngularJS。使用現有數據庫時熟悉實體框架
我們有一個現有的大型數據庫,我使用Code-First Using Existing Database方法創建了EF模型,我們將數據傳輸對象類用作API方法的輸入/輸出,所以我們不直接暴露我們的模型類。所以基本上,我試圖在EF,Web Api和AngularJS的同時熟練掌握。大多數情況下,我對後兩者相當舒服,但對於EF我還沒有完全適應。我曾在微軟虛擬學院觀看過很多視頻,但這是我第一次有這方面的實際經驗。
我們一直在研究這個應用程序幾個月,到目前爲止我們只需要在我們的實體(POCO DTO's)上使用簡單屬性的平面對象進行CRUD操作。然而,我們終於遇到了一些情況,我們不僅要處理我們的類,而且要處理類本身的屬性;一個親子關係。
因此,我有以下問題:
我看到,當我們在我們的DB正確的外鍵關係,即虛擬財產在EF,其中從我記得是支持創建延遲加載。但是,在我們使用Web服務(Web Api)的環境中,延遲加載並不是真的可行。我們的對象模型確實允許一些非常大的類的層次結構,其中一個完全填充的對象及其子元素將意味着大量的數據將被傳遞,但實際上並不是必需的,所以在大多數情況下,第一級對象就是我們所有的需要。但是在某些情況下,我們確實想要填充子類,所以我的問題是我們如何做到這一點,以及我們在哪裏做到這一點?我查看了DB上下文中自動生成的代碼,但我們也使用腳手架代碼來創建我們的控制器。我們需要做哪些事情?我看過代碼示例,顯示瞭如何做到這一點,但沒有具體說明代碼的位置。它似乎在一個控制器內,但我可能是錯的。
如果我們允許2級或更多級別的對象層次,EF是否自動處理操作(更新,刪除等) - 例如,如果我們有一個「公司」對象具有「客戶」對象,我們刪除「公司」對象,相關的「客戶」對象也會被刪除嗎?另外,像是在事務中自動執行的多步操作,還是我們需要明確設置?
如果我修改模型類或數據庫上下文,看到這段代碼是自動生成的,這通常是不好的做法,因爲我的更改可能會被覆蓋,所以我假設控制器代碼是我想讓我的變化。我知道數據庫遷移,但我沒有與他們的經驗,我相信我需要在某個時候使用它們,因爲我相信我們的數據庫可能沒有EF所需的所有外鍵關係,目前需要。
我知道這是一個很長的帖子,但如果任何人都可以就如何做一些事情一定的指導意義,因爲它不是唯一的我來說,這不得不應付這一點,但我有兩個其他開發商在我的球隊誰正在從事這個項目,我們都和其他人一樣缺乏經驗。由於
我們已經做了#1。這也讓我們可以靈活地轉換數據,但是現在它基本上是模型類的一個克隆(具有更適當的屬性名稱)。至於#3,沒有edmx文件。我通過添加一個新的ADO數據模型並從數據庫中選擇Code First來創建模型類。我不記得爲什麼我們選擇不使用數據庫中的EF模型(我認爲我們的老闆推薦了數據庫中的Code First)。 – DesertFoxAZ