代码改变世界

LINQ TO SQL学习笔记(5)_SQLMetal和Mapping文件缺陷

  宗哥  阅读(725)  评论(1编辑  收藏  举报

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();


            }
复制代码

 

运行:

“/”应用程序中的服务器错误。

DELETE 语句与 REFERENCE 约束"FK_Order_Details_Orders"冲突。该冲突发生于数据库"Northwind",表"dbo.Order Details", column 'OrderID'。
语句已终止。

说明: 执行当前 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郁闷!

本文代码下载:下载

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
;
点击右上角即可分享
微信分享提示