更好使用ADO.NET訪問(wèn)技術(shù)說(shuō)明
這就是我們的.NET支持。我們的方向是提供一個(gè)全面的功能訪問(wèn)。所以對(duì)你這個(gè)問(wèn)題的回答是肯定的。我們將根據(jù)我們用戶(hù)的需要支持.NET,看看在Oracle技術(shù)網(wǎng)站上Windows開(kāi)發(fā)中心提供的所有內(nèi)容吧。ADO.NET訪問(wèn)我們是很積極主動(dòng)的。
如果僅僅檢索數(shù)據(jù),并不需要更新數(shù)據(jù),則可以通過(guò)使用MergeOption.NoTracking 取消變更跟蹤。這樣,就不會(huì)使用ObjectStateManager,減少執(zhí)行查詢(xún)的時(shí)間,所有返回的實(shí)體將是分離的狀態(tài)(detached state)。在ASP.NET web application 或在WinForms / WPF Grids 控件中以只讀方式顯示數(shù)據(jù)時(shí),NoTracking 是一個(gè)比較好的選擇。
在使用對(duì)象服務(wù)(Object Services)和ADO.NET訪問(wèn)時(shí),需要調(diào)用ObjectQuery 的一個(gè)重載構(gòu)造函數(shù),其中第三個(gè)參數(shù)是MergeOption 枚舉。默認(rèn)的行為是 AppendOnly,可以改變?yōu)?NoTracking。
- Product product1 = context.Product.FirstOrDefault(p => p.ProductID == 1004);
- if (product1 != null)
- {
- product1.Color = "Black";
- product1.StandardCost = 20;
- product1.ListPrice = 25;
- }
- var objectStateEntries = context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
- foreach (var entry in objectStateEntries)
- {
- Console.WriteLine("{0} - {1} - {2}",
- entry.EntityKey.EntityContainerName,
- entry.EntityKey.EntitySetName.ToString(),
- entry.EntityKey.EntityKeyValues.First().Key + " = " +
- entry.EntityKey.EntityKeyValues.First().Value);
- for (int i = 0; i < entry.OriginalValues.FieldCount; i++)
- {
- Console.WriteLine("\t {0} -> {1}", entry.OriginalValues[i], entry.CurrentValues[i]);
- }
- }
在下面的示例中,首先檢索特定的Product記錄,修改其中3個(gè)屬性,并調(diào)用GetObjectStateEntries(EntityState.Modified) 方法,返回所有更新實(shí)體的列表,并進(jìn)一步遍歷ObjectStateEntry集合,顯示實(shí)體名稱(chēng),ADO.NET訪問(wèn),初始值和當(dāng)前值。

















