MVC3+EF4.1學習系列(七)-----EF並發的處理

來源:互聯網
上載者:User

標籤:釋放   hang   pos   方法   common   cat   char   ges   代碼   

看這篇文章之前 推薦園子裡的 這個文章  已經有介紹了 而且寫的很好~~ 可以先看下他的 再看我的

並發

1.封閉式並行存取

簡單的說 就是一個使用者訪問一條資料時 則把這個資料變為唯讀屬性  把該資料變為獨佔 只有該使用者釋放了這條資料 其他使用者才能修改 這期間如果該使用者上個廁所 出去玩一圈 沒有退出 則其他人都要等很久 很顯然 這不是我們期望的效果  也不是這篇文章討論的重點

2.開放式並行存取

開放式並行存取相對封閉式並行存取,使用者讀取資料時不鎖定資料。當一個使用者更新資料時,系統將進行檢查,查看該使用者讀取資料後其他使用者是否又更改了該資料。如果其他使用者更新了資料,將產生一個錯誤。這也是這篇文章主要講的。

如何讓EF實現開放式並行存取呢 其實很簡單 只用簡單三部就可以打造開放式並行存取了~

以院系類為例子

第一步 . 給實體類添加 一個時間戳記

  1537709052
public Byte[] Timestamp { get; set; }

第二步,在我們的院系編輯檢視裡 加上

@Html.HiddenFor(model => model.Timestamp)

也就是說 在讀取的時候 把這個時間戳記讀取出來

第三步,捕獲並發異常給使用者一個友好的提示

        [HttpPost]
public ActionResult Edit(Department department)
{
try
{

if (ModelState.IsValid)
{
db.Entry(department).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DbUpdateConcurrencyException ex)
{
ModelState.AddModelError(string.Empty, "友好的提示");
}
}

好了 這時可以如果有 如下情況  一個使用者開啟編輯院系  另一個也開啟了編輯院系  當一個提交後  另一個再提交 則會提示出  友好的提示 告訴他 資料已經變更了~~

3.思考

並發管理 雖然實現了 EF幫我做了 但是我們不應該只局限與實現  要去想想中間給了我們哪些啟發 

開啟SQL監控  開開更新時  EF幫我們做了哪些操作

exec sp_executesql N‘update [dbo].[Department]
set [Name] = @0, [Budget] = @1, [StartDate] = @2, [InstructorID] = @3
where (([DepartmentID] = @4) and (1537709052 = @5))
select 1537709052
from [dbo].[Department]
where @@ROWCOUNT > 0 and [DepartmentID] = @4‘,N‘@0 nvarchar(50),@1 decimal(19,4),@2 datetime,@3 int,@4 int,@5 binary(8)‘,@0=N‘WLF‘,@1=10000.0000,@2=‘09 1 2007 12:00:00:000AM‘,@3=3,@4=3,@5=0x00000000000007D9

我們看到 更新後 查詢Timestamp

於是 個人猜想 不見得對  過程應該是這樣的

使用者讀取 這條資料時  讀取到他的 Timestamp   然後更新時  檢測則個和上次是否一樣 不一樣 說明有人剛才更新過了  這個方法 我們在用ado.net時  同樣可以用到~~

細心的朋友會發現 上面的SQL語句更新時 並沒有更新 Timestamp 啊 

這裡再說下這個  timestamp

每個資料庫都有一個計數器,當對資料庫中包含 timestamp 列的表執行插入或更新操作時,該計數器值就會增加。 該計數器是資料庫時間戳記。 這可以追蹤資料庫內的相對時間,而不是時鐘相關聯的實際時間。 一個表只能有一個timestamp 列。 每次修改或插入包含 timestamp 列的行時,就會在 timestamp 列中插入增量資料庫時間戳記值。

詳見 MSDN------原文



總結

學習應該多去思想 瞭解原理 才能破而後立 ~~

下一節 EF處理繼承

MVC3+EF4.1學習系列(七)-----EF並發的處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.