EF在N Tier架構下的儲存注意事項

2022-01-11 13:10:13 字數 1349 閱讀 6622

ef在n-tier架構下的儲存注意事項

szjay

前提

乙個實體物件必須先進入objectcontext中才能進行增、刪、改的操作。

新增

新增的過程很簡單,呼叫addobject方法即可。

修改

如果要修改的實體物件是detached狀態,那麼必須先呼叫attachto方法。

attachto方法告訴objectcontext,雖然當前實體物件沒有在objectcontext中存在,但它並不是乙個新的(added狀態)實體物件,而是在資料庫中存在,但objectcontext中未裝載而已。

如果不採用attachto方法,那麼就需要從資料庫中查詢一次到objectcontext中,否則objectcontext不「認識」此實體物件。

detached狀態產生的原因有兩種:

1.手工增加了實體物件,但未呼叫addobject或attach方法;

2.實體物件是從objectcontext獲取的,但隨後脫離了objectcontext;

乙個經典的儲存實體物件修改的步驟是:

//首先查詢出實體物件。

using(entities ctx = new entities) //entities是objectcontext的派生類。

//然後實體物件脫離objectcontext,變為detached狀態,傳送到客戶端做處理。

product.name = "abc"; //客戶端修改實體物件的屬性值。

//客戶端返回實體物件。

using(entities ctx = new entities) //注意,我們開了另乙個objectcontext。

刪除

objectcontext刪除實體物件時,首先會判斷實體物件是否在本身的上下文中,因此在刪除前,我們要麼先從資料庫中load一次,要麼呼叫attachto方法,然後再呼叫deleteobject方法。

實際上,ef刪除乙個實體物件,只會使用到它的主鍵欄位和時間戳字段,因此我們可以「偽造」乙個要刪除的實體物件(stub,不完整實體物件):

product product = new product();

然後呼叫attachto和deleteobject即可。

注意

當乙個物件圖(object graph)中的乙個物件附加到了objectcontext,那麼整個物件圖的所有物件,都自動附加到了這個objectcontext。

乙個實體物件只能同時被附加到乙個objectcontext中。

在EF下使用基於T4模版的POCO實體生成器

在entity framework 4.0提供了對poco 簡單傳統clr物件 plain old clr object 支援,這樣讓我們專注於業務邏輯和更有效的進行單元測試.並且poco不需像預設ef實體一樣要繼承才能實現,所以可以更靈活的切換.本文將介紹如何自動生成poco並替換ef生成的實體....

在Linux下父子程序對共享儲存區的訪問

子程序向共享儲存區寫資料,父程序讀共享儲存區資料。子程序向共享儲存區修改資料,父程序讀共享儲存區資料 本次實驗其實重點的是這麼幾個變數 addr shmid 以及幾個重要的函式 shmet shmat shmget shmctl 對於系統v共享記憶體,主要有以下幾個api shmget shmat ...

Block 在不同情況下的變數儲存區域

一.如果只使用全域性或靜態變數或不使用外部變數,那麼block塊的 會儲存在全域性區 二.如果使用了外部變數,在arc中,block塊的 會儲存在堆區 在mrc中,block快的 會儲存在棧區 三.block預設情況下不能修改外部變數,只能讀取外部變數 在arc中,外部變數存在堆中,這個變數在blo...