91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linq并發沖突

發布時間:2020-08-03 18:46:04 來源:網絡 閱讀:534 作者:Aonaufly 欄目:編程語言

1,產生并發沖突

在數據庫應用系統中,當2個或者2個以上的用戶,試圖對同一數據庫行記錄進行更新,這種情形叫并發.當他們同時嘗試向同一數據庫行記錄的一列或多咧提交更新數據時,此時會出現并發沖突.

2,并發沖突檢測

開發者通過設置每個成員的System.Data.Linq.Mapping.ColumnAttribute中的UpdateCheck屬性,可以控制數據庫的每個字段控制如何進行并發沖突檢測,控制并發沖突的檢測頻率.

UpdateCheck的屬性列表

Always 始終使用此成員檢測并發沖突

Never 永不使用此成員檢測并發沖突

WhenChanged 只有當應用程序已經改變此成員值時,才使用此成員檢測并發沖突

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.Data.Linq.Mapping;
namespace LinqObject.models
{
    [Table(Name = "Player")]
    public class PlayerInfoVO
    {
                                                                                                                                                                                  
        private string name;
        [Column(Name="name")]
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
                                                                                                                                                                                  
        private int id;
        [Column(IsPrimaryKey=true,Name="id")]
        public int Id
        {
            get { return id; }
            set { id = value; }
        }
                                                                                                                                                                                  
        private int level;
        [Column(Name = "level_id",UpdateCheck=UpdateCheck.Never)]
        public int Level
        {
            get { return level; }
            set {
                level = value;
            }
        }
        private EntityRef<MyLevel> _myLevel;
        [Association(Storage="_myLevel",ThisKey="level_id")]
        public EntityRef<MyLevel> _MyLevel
        {
            get { return _myLevel; }
            set { _myLevel = value; }
        }
    }
}

3,并發沖突模式

指的是什么時候報告并發沖突.開發者設置并發沖突模式,就是指定并發異常的引發時間

ConflictMode

FailOnFirstConflict 在第一次并發沖突發生時即引發異常,默認

ContinueOnConflict 發生并發沖突時,繼續后面的所有更新,直到所有更新完成后在觸發異常.

private static void modifyQuery()
 {
     var db = new MYDBDataContext();
     int count = db.Player.Where(c => c.name == "Aonaufly").Count();
     if (count == 1)
     {
         var existingPlayer = db.Player.First();
         existingPlayer.level_id = 7;
         db.SubmitChanges(ConflictMode.ContinueOnConflict);
     }
 }

4,并發沖突處理

在發生并發沖突時,需要在異常處理語句塊中對并發沖突進行處理.一般來說,解決并發沖突的辦法是調用System.Data.Linq.ChangeConflictCollection中的ResolvAll()方法,在方法的輸入參數中設置System.Data.Linq.RefreshMode處理沖突的3種方式.即KeepCurrentValues,OverwriteCurrentValues,KeepChanges

①保留當前值

private static void modifyQuery()
{
    var db = new MYDBDataContext();
    int count = db.Player.Where(c => c.name == "Aonaufly").Count();
    if (count == 1)
    {
        var existingPlayer = db.Player.First();
        existingPlayer.level_id = 7;
                                    
        try
        {
            db.SubmitChanges();
        }
        catch (ChangeConflictException) {
                                        
            db.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues);
            db.SubmitChanges();
        }
    }
}

②,覆蓋當前值

OverwriteCurrentValues

③保留修改

KeepChanges只修改上個用戶沒被修改的而當前用戶修改的字段

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

斗六市| 桑植县| 龙山县| 金平| 板桥市| 东乡族自治县| 台前县| 巴彦淖尔市| 浙江省| 调兵山市| 阜康市| 宜城市| 台中市| 农安县| 惠来县| 察雅县| 怀仁县| 双辽市| 泰州市| 将乐县| 龙海市| 石门县| 揭东县| 仁化县| 获嘉县| 茶陵县| 连城县| 宁武县| 师宗县| 普宁市| 奉贤区| 栾城县| 纳雍县| 益阳市| 江华| 黔江区| 富裕县| 泾川县| 德州市| 循化| 遂川县|