程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> LINQ TO SQL中SQLMetal和Mapping文件缺陷

LINQ TO SQL中SQLMetal和Mapping文件缺陷

編輯:關於.NET

Mapping文件的缺陷

開發LINQ TO SQL,我個人傾向選擇外部配置文件的方式進行開發,靈活,(這個也是.Net平台下的建議選擇,如果你了解WCF,會更有體會)。 利用SQLMeatal開發Mapping文件的時候,在修改Association節的DeleteRule屬性的時候,感覺是LING TO SQL的缺陷。

MSND:

NET Framework 類庫

AssociationAttribute..::.DeleteRule 屬性

更新:2007 年 11 月

獲取或設置關聯的刪除行為。

命名空間: System.Data.Linq.Mapping

程序集: System.Data.Linq(在 System.Data.Linq.dll 中)

類型:System..::.String

一個表示規則的字符串。

備注

如果設置為 null,則不會添加任何刪除行為。例如,“CASCADE”會將“ON DELETE CASCADE”添加到外鍵關系

本例子以NorthWind為例子,按照這種說法,我在Order和Oder_Detail對象的關系設置如下:

<Association Name="FK_Order_Details_Orders" Member="OrderDetails" Storage="_OrderDetails" ThisKey="OrderID" OtherKey="OrderID" DeleteRule="ON DELETE CASCADE" />

這樣即使我把數據庫中Oders表和Order Details表之間關系解除,LINQ TO SQL運行時應該會探測這一關系,進行先刪除Order Details相關的行,然後再刪除Order。

然而事實是這樣:

代碼如下:

         string con = "server=.;database=Northwind;uid=sa;pwd=Mypass800624";
            string xmlFilePath = @"D:\MyStudy\LINQToSQL\WebApplication1\MapNorthwind.Xml";
            XmlMappingSource mapping = XmlMappingSource.FromXml(File.ReadAllText(xmlFilePath));

            using (ObjNorthwind context = new ObjNorthwind(con, mapping))
            {

                var obj = context.Orders.Where(p => p.OrderID == 10250);

                context.Orders.DeleteAllOnSubmit(obj);
                context.SubmitChanges();


            }

運行:

說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。

異常詳細信息: System.Data.SqlClient.SqlException: DELETE 語句與 REFERENCE 約束"FK_Order_Details_Orders"沖突。該沖突發生於數據庫"Northwind",表"dbo.Order Details", column 'OrderID'。

語句已終止。

為什麼LINQ TO SQL 不去探測這個級聯關系,自動生成生成先刪除[Order Details]表的管理子表哪 ?哪這個配置文件這個屬性有什麼用?

另外SQlMetal這個工具提供的InterFace太可憐了,看看MyGeneration郁悶!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved