天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Linq To Sql進(jìn)階系列(三)CUD和Log

系列文章導(dǎo)航:

Linq To Sql進(jìn)階系列(一)從映射講起

Linq To Sql進(jìn)階系列(二)M:M關(guān)系

Linq To Sql進(jìn)階系列(三)CUD和Log

Linq To Sql進(jìn)階系列(四)User Define Function篇

Linq To Sql進(jìn)階系列(五)Store Procedure篇

Linq To Sql進(jìn)階系列(六)用object的動(dòng)態(tài)查詢(xún)與保存log篇

Linq To Sql進(jìn)階系列(七)動(dòng)態(tài)查詢(xún)續(xù)及CLR與SQL在某些細(xì)節(jié)上的差別


CUD就是Create, Update, Delete。在別人都寫(xiě)過(guò)了后,還有什么是新鮮的呢?

1,CreateDatabase
            Northwind db = new Northwind("You connection string");  //注意database項(xiàng),起一個(gè)不存在的數(shù)據(jù)庫(kù)名稱(chēng)
            db.Log = Console.Out;
            if (!db.DatabaseExists())  //如果,數(shù)據(jù)庫(kù)不存在
                db.CreateDatabase();   //創(chuàng)建數(shù)據(jù)庫(kù)
這個(gè)的好處,就是你可以用OR designer設(shè)計(jì)實(shí)體類(lèi),定義其在數(shù)據(jù)庫(kù)的各個(gè)column,然后,將其返回到數(shù)據(jù)庫(kù)。前段時(shí)間,和別人爭(zhēng)論起,在程序設(shè)計(jì)時(shí),是先有實(shí)體類(lèi)還是先有實(shí)體表時(shí),其主張,是由高層到底層,即先設(shè)計(jì)實(shí)體類(lèi),再做表。那這個(gè)恰好滿(mǎn)足了這個(gè)需要。但是,在OR designer上設(shè)計(jì)實(shí)體類(lèi)的數(shù)據(jù)庫(kù)屬性時(shí),及其難用,我寧愿根據(jù)實(shí)體類(lèi),去設(shè)計(jì)數(shù)據(jù)庫(kù)中的表,然后,在重新生成這些實(shí)體類(lèi)。

2, Inser記錄
2.0
這個(gè)操作相當(dāng)簡(jiǎn)單。new出來(lái)一個(gè)對(duì)象,使用Add方法將其加入到其對(duì)應(yīng)Entity集合中后,使用SubmitChanges函數(shù)即可。
    var newCustomer = new Customer { CustomerID = "MCSFT",
                                     CompanyName = "Microsoft",
                                     ContactName = "John Doe",
                                     ContactTitle = "Sales Manager",
                                     Address = "1 Microsoft Way",
                                     City = "Redmond",
                                     Region = "WA",
                                     PostalCode = "98052",
                                     Country = "USA",
                                     Phone = "(425) 555-1234",
                                     Fax = null
                                   };
    db.Customers.Add(newCustomer);
    db.SubmitChanges();

2.1
如果,數(shù)據(jù)表中有數(shù)據(jù)庫(kù)自動(dòng)賦值的column的呢?就拿Orders表來(lái)說(shuō)事。其OrderID就是自增型的。看看該字段的映射。

[Column(Storage="_OrderID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY",
  IsPrimaryKey
=true, IsDbGenerated=true)]
    
public int OrderID
    
{
        
get
        
{
            
return this._OrderID;
        }

        
set
        
{
            
if ((this._OrderID != value))
            
{
                
this.OnOrderIDChanging(value);
                
this.SendPropertyChanging();
                
this._OrderID = value;
                
this.SendPropertyChanged("OrderID");
                
this.OnOrderIDChanged();
            }

        }

    }

系列文章導(dǎo)航:

Linq To Sql進(jìn)階系列(一)從映射講起

Linq To Sql進(jìn)階系列(二)M:M關(guān)系

Linq To Sql進(jìn)階系列(三)CUD和Log

Linq To Sql進(jìn)階系列(四)User Define Function篇

Linq To Sql進(jìn)階系列(五)Store Procedure篇

Linq To Sql進(jìn)階系列(六)用object的動(dòng)態(tài)查詢(xún)與保存log篇

Linq To Sql進(jìn)階系列(七)動(dòng)態(tài)查詢(xún)續(xù)及CLR與SQL在某些細(xì)節(jié)上的差別


 

你可以撲獲如下的sql

INSERT INTO [dbo].[Orders]([CustomerID][EmployeeID][OrderDate][RequiredDate][ShippedDate][ShipVia][Freight],
[
ShipName][ShipAddress][ShipCity][ShipRegion][ShipPostalCode][ShipCountry])
VALUES
 (@p0@p1@p2@p3@p4@p5@p6@p7@p8@p9@p10@p11@p12)

SELECT [t0].[OrderID]
FROM [dbo].[Orders] AS [t0]
WHERE [t0].[OrderID] = (SCOPE_IDENTITY())

-- @p0: Input StringFixedLength (Size = 5; Prec = 0; Scale = 0) []
--
 @p1: Input Int32 (Size = 0; Prec = 0; Scale = 0) []
--
 @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) []
--
 @p3: Input DateTime (Size = 0; Prec = 0; Scale = 0) []
--
 @p4: Input DateTime (Size = 0; Prec = 0; Scale = 0) []
--
 @p5: Input Int32 (Size = 0; Prec = 0; Scale = 0) []
--
 @p6: Input Currency (Size = 0; Prec = 19; Scale = 4) []
--
 @p7: Input String (Size = 0; Prec = 0; Scale = 0) []
--
 @p8: Input String (Size = 4; Prec = 0; Scale = 0) [Test]
--
 @p9: Input String (Size = 0; Prec = 0; Scale = 0) []
--
 @p10: Input String (Size = 0; Prec = 0; Scale = 0) []
--
 @p11: Input String (Size = 0; Prec = 0; Scale = 0) []
--
 @p12: Input String (Size = 0; Prec = 0; Scale = 0) []
--
 Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

系列文章導(dǎo)航:

Linq To Sql進(jìn)階系列(一)從映射講起

Linq To Sql進(jìn)階系列(二)M:M關(guān)系

Linq To Sql進(jìn)階系列(三)CUD和Log

Linq To Sql進(jìn)階系列(四)User Define Function篇

Linq To Sql進(jìn)階系列(五)Store Procedure篇

Linq To Sql進(jìn)階系列(六)用object的動(dòng)態(tài)查詢(xún)與保存log篇

Linq To Sql進(jìn)階系列(七)動(dòng)態(tài)查詢(xún)續(xù)及CLR與SQL在某些細(xì)節(jié)上的差別


3, Update
這個(gè)更簡(jiǎn)單,用Linq To Sql獲取對(duì)象后,進(jìn)行一系列處理后,做更新,直接調(diào)用DataContext中的SubmitChanges方法。我們來(lái)講一個(gè)在不同DataContext之間,更新的問(wèn)題。涉及到不同的DataContext,就要使用Attach方法了。在使用Attach方法時(shí),請(qǐng)?jiān)谄鋵?shí)體類(lèi)的主鍵的Attribute上,添加IsVersion=true,比如:[Column(Storage="_PageID"...., IsVersion=true)] 。這樣,另外一個(gè)DataContext才知道,該對(duì)象是否需要更新。大家需要注意的是,在更新問(wèn)題上,對(duì)誰(shuí)更新,就直接Attach誰(shuí)。比如,有A和B兩個(gè)實(shí)體,他們之間是有關(guān)系的。對(duì)A更新直接對(duì)A操作,而不是對(duì)B操作。見(jiàn)例子:
                nwind.Order o = null;

 

                using (nwind.Northwind db = new nwind.Northwind(constr))
                {
                    o = db.Orders.First();
                    o.Customer.City = "new city";
                    //db.SubmitChanges(); //此處提交是沒(méi)有問(wèn)題的。
                }


                using (nwind.Northwind db = new nwind.Northwind(constr))
                {
                    db.Log = Console.Out;
                    db.Orders.Attach(o, true); // 對(duì)Customer進(jìn)行更新,卻Attach了Order,其結(jié)果,只是在數(shù)據(jù)庫(kù)中insert一個(gè)新的Customer
                    //db.Customers.Attach(o.Customer, true);  //這個(gè)是對(duì)的。
                    db.SubmitChanges();
                }
4, Delete
Delete 使用Remove方法。唯一可以講的是,在One:Many的關(guān)系中,需要先Remove其Many端,其次才是One端。道理很簡(jiǎn)單,One端是主鍵呀,只要Many端還有一個(gè)和該鍵相關(guān)的記錄,服務(wù)器是不會(huì)允許你刪除該主鍵的。比如:
    var order =
        (from o in db.Orders
         where o.CustomerID == "WARTH" && o.EmployeeID == 3
         select o).First();

    foreach (OrderDetail od in orderDetails)
    {
        db.OrderDetails.Remove(od);
    }

    db.Orders.Remove(order);

    db.SubmitChanges();

5, Log
Log嗎,顧名思義,就是日志。其記錄了Linq To Sql的所有操作。我們可以將起寫(xiě)入文件,以備檢查對(duì)數(shù)據(jù)庫(kù)的操作。比如:
            StreamWriter sw = new StreamWriter("log.txt",true);
            db.Log = sw;

            var q = db.Customers.Select(c => c).ToList();

            sw.Close();
6, 更新時(shí)的沖突和事務(wù)
紫色陰影寫(xiě)的挺好的。引他的吧。
http://www.cnblogs.com/blusehuang/archive/2007/07/16/819677.html 事務(wù)
http://www.cnblogs.com/blusehuang/archive/2007/07/06/808529.html  沖突

PS:關(guān)于成立linq團(tuán)隊(duì)的提議。有人響應(yīng)沒(méi)?把我做為一個(gè)創(chuàng)始人就是了。^_^

it知識(shí)庫(kù)Linq To Sql進(jìn)階系列(三)CUD和Log,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 娇妻归来在线观看免费完整版电影 | 国产人妻系列无码专区97SS | 果冻传媒最新视频在线观看 | 一本道mw高清码二区三区 | 久青草国产观看在线视频 | 99久久精品国内 | 国产精品观看视频免费完整版 | 亚洲福利天堂网福利在线观看 | 精品水蜜桃久久久久久久 | 护士喂我吃乳液我脱她内裤 | 国产精品久久久久久精品... | 一个人HD高清在线观看免费视频 | 一个人在线观看免费中文www | 成a人片亚洲日本久久 | 中文无码热在线视频 | 暖暖视频免费观看视频 | 亚洲第一区欧美日韩精品 | 伊人久久大香线蕉无码麻豆 | 俄罗斯性孕妇孕交 | 女人高潮久久久叫人喷水 | 琪琪婷婷五月色综合久久 | 亚洲视频在线观看网站 | 欧美午夜理伦三级在线观看 | 最新色导航 | 国产午夜精品一区理论片飘花 | aa级毛片毛片免费观看久 | 午夜AV亚洲一码二中文字幕青青 | 久草视频在线观看免费4 | 狠狠色综合久久丁香婷婷 | 亚洲爆乳少妇精品无码专区 | 免费观看99热只有精品 | 亚洲人女同志video | 色琪琪无码成人AV视频 | 国产亚洲va在线电影 | 欧美性爱 成人 | 亚洲熟妇色自偷自拍另类 | 亚洲国产精品VA在线看黑人 | 亚洲1区2区3区精华液 | 欧美日韩北条麻妃一区二区 | 99免费视频观看 | 中文中幕无码亚洲在线 |