首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

MySoft.Data 入門到精通(四):資料新增完整攻略

     編輯:關於.NET

詳細說明 DbSession 執行資料新增的六種模式、Detach 進階用法與 InsertCreator 建構器。

前置設定:擴充 Insert/Update 方法

public class DataExample : DbSession {
    public DataExample() : base("DataExample") { /* 日誌註冊 */ }
    public int Insert<T>(T item) where T : Entity { item.Detach(); return base.Save(item); }
    public int Update<T>(T item) where T : Entity { item.Attach(); return base.Save(item); }
    // 批次新增擴充
    public int Insert<T>(IList<T> items) where T : Entity {
        int ret = 0; foreach (var item in items) ret += Insert(item); return ret;
    }
}

核心:Save 統一方法,外部透過 Attach()/Detach() 控制實體狀態。

一、強型別實體新增

1. 單一實體

var product = new Products { ProductName = "測試產品1" };
DataAccess.ExampleSession.Save(product);

2. 批次新增

var list = Enumerable.Range(0, 10).Select(i => new Products { ProductName = "測試" + i }).ToList();
var batch = DataAccess.ExampleSession.BeginBatch(10);
list.ForEach(item => batch.Save(item));
batch.Process();

3-6. 交易/外部連線/外部交易模式

同更新章節模式,將 Attach() 改為 Detach() 或省略(新實體預設為 Detach 狀態)。

Detach 進階用法

1. 排除欄位使用資料庫預設值(保留原狀態)

product.Detach(Products._.CategoryID);                           // 排除單一欄位
product.Detach(Field.All.Remove(Products._.ProductName));        // 僅包含指定欄位

2. 排除欄位(重設狀態)

product.DetachAll(Products._.CategoryID);
product.DetachAll(Field.All.Remove(Products._.ProductName));

差異:Detach 疊加排除,DetachAll 清除後重新設定。

InsertOrUpdate 智慧合併

var product = new Products { ProductID = 1, ProductName = "測試" };
DataAccess.ExampleSession.InsertOrUpdate(product); // 依主鍵自動判斷

InsertCreator 建構器

1. 實體驅動

var ic = InsertCreator.NewCreator().From<Products>().SetEntity<Products>(product);
DataAccess.ExampleSession.Execute(ic);

2. 字串指定

var ic = InsertCreator.NewCreator().From("Products").AddInsert("ProductName", "測試");
DataAccess.ExampleSession.Execute(ic);

3. 回傳識別欄位值

var ic = InsertCreator.NewCreator()
    .From("Products").AddInsert("ProductName", "測試")
    .SetIdentityField("ProductID");
int productID;
DataAccess.ExampleSession.Execute(ic, out productID);

以上皆可搭配交易:trans.Execute(ic)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved