一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

系列文章導航:

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

Linq To Sql進階系列(二)M:M關系

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

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

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

Linq To Sql進階系列(六)用object的動態查詢與保存log篇

Linq To Sql進階系列(七)動態查詢續及CLR與SQL在某些細節上的差別


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

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

2, Inser記錄
2.0
這個操作相當簡單。new出來一個對象,使用Add方法將其加入到其對應Entity集合中后,使用SubmitChanges函數即可。
    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
如果,數據表中有數據庫自動賦值的column的呢?就拿Orders表來說事。其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();
            }

        }

    }

系列文章導航:

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

Linq To Sql進階系列(二)M:M關系

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

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

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

Linq To Sql進階系列(六)用object的動態查詢與保存log篇

Linq To Sql進階系列(七)動態查詢續及CLR與SQL在某些細節上的差別


 

你可以撲獲如下的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

系列文章導航:

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

Linq To Sql進階系列(二)M:M關系

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

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

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

Linq To Sql進階系列(六)用object的動態查詢與保存log篇

Linq To Sql進階系列(七)動態查詢續及CLR與SQL在某些細節上的差別


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

 

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


                using (nwind.Northwind db = new nwind.Northwind(constr))
                {
                    db.Log = Console.Out;
                    db.Orders.Attach(o, true); // 對Customer進行更新,卻Attach了Order,其結果,只是在數據庫中insert一個新的Customer
                    //db.Customers.Attach(o.Customer, true);  //這個是對的。
                    db.SubmitChanges();
                }
4, Delete
Delete 使用Remove方法。唯一可以講的是,在One:Many的關系中,需要先Remove其Many端,其次才是One端。道理很簡單,One端是主鍵呀,只要Many端還有一個和該鍵相關的記錄,服務器是不會允許你刪除該主鍵的。比如:
    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的所有操作。我們可以將起寫入文件,以備檢查對數據庫的操作。比如:
            StreamWriter sw = new StreamWriter("log.txt",true);
            db.Log = sw;

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

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

PS:關于成立linq團隊的提議。有人響應沒?把我做為一個創始人就是了。^_^

it知識庫Linq To Sql進階系列(三)CUD和Log,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人啪精品 | 国产精品路线1路线2路线 | 欧美五月婷婷 | 国产美女精品一区二区三区 | 亚洲九九 | 麻豆国产在线视频 | 色偷偷91久久综合噜噜噜 | 91系列在线观看 | 免费视频一区 | 亚洲成人播放 | 成人综合视频网 | 黄网站色成年片大免费软件 | 自偷自拍亚洲欧美清纯唯美 | 国产在线一区二区三区四区 | 亚洲一区亚洲二区亚洲三区 | 五月婷婷网站 | 色网站在线 | 欧美日韩视频在线第一区二区三区 | 国产一二三 | 成人国产精品 | 国产黄色免费在线观看 | 高清视频黄色录像免费 | 免费观看福利视频 | 欧美一级高跟鞋鞋交 | 婷婷丁香激情五月 | 天天做天天添天天谢 | 91在线 在线播放 | 成人69视频| 欧美另类精品 | 国产乱子伦 | 一区二三国产 | 亚洲天堂黄 | 黄在线观看www免费看 | 91正在播放极品白嫩在线观看 | 五月深爱网 | 国产在线干 | 国产一级做a爰片久久毛片 国产一级做a爰片久久毛片99 | 国产成人综合亚洲亚洲欧美 | 一本久道久久综合多人 | 国产精品视频全国免费观看 | 久久丝袜精品中文字幕 |