LINQ TO SQL学习笔记(5)_SQLMetal和Mapping文件缺陷
2009-04-16 13:17 宗哥 阅读(724) 评论(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 中)
一个表示规则的字符串。
备注
如果设置为 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 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郁闷!
本文代码下载:下载
声明: 本文作者:宗哥,宗子城
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明。 ...