Linq To Sql 项目从Beta迁移到RTM要注意那些事项呢?RTM相对beta又做了那些变动呢?本文为你揭开这些问题。这里,我们只谈项目中经常碰到的,其他的略去不写。你若是有疑问,可以回贴问,我再帮你找。最后,放出修正文档。特别感谢伍迷TX的督促。 1,函数名称的改变 在添加,更新和删除实体对象时,本blog中的 一文中所提及的,其函数名更改如下。
Beta 2 Name | RTM Name |
Add | InsertOnSubmit |
AddAll | InsertAllOnSubmit |
Remove | DeleteOnSubmit |
RemoveAll | DeleteAllOnSubmit |
Beta 2 Name | RTM Name |
AddedEntities | Inserts |
RemovedEntities | Deletes |
ModifiedEntities | Updates |
Customer c = null; Using(DataContext db1 = new DataContext()) { db1.DeferredLoadingEnabled = false; c= db1.Customers.First(); } Using(DataContext db2 = new DataContext()) { db2.Customers.Attach(c); ….do something… } |
var q = from c in db.Customers where Country == " USA " select new Customer { Name = c.Name, City = c.City } ;
现在,这么玩就会在run-time时抛异常。这个地方的修改是因为一个bug 引起的。在beta2中,下面的代码 var q = from c in db.Customers select new Customer { City = c.City } ; foreach (var item in q) { Console.WriteLine(item.City); }
你得到的结果全是 Aachen,虽然结果数目是对了,但是全是第一条纪录的值. 如果换做匿名类 var q = from c in db.Customers select new { City = c.City } ; foreach (var item in q) { Console.WriteLine(item.City); }
则结果又正确了。为了修复这个问题,在查询语句中,显示构造实体对象将抛异常。如果在查询语句中,显示构造的对象不是实体类的话,即没有table属性,那么又不会有异常。这里只所以会做这样的变动是考虑了更新的问题,如果,你显示构造实体对象时,不选主键,而你又要求更新,linq to sql怎么帮你做呢?我稍候提供的文档将解释的很详细,不多言。 6,delete时的改变 在beta2中,如果,你移除从某一表中移除一个实体对象,你须手动从该实体对象的 EntitySet s 移除实体,并遵从1:1的关系。(beta2被我卸了,我也不记得 Dinesh Kulkarni说是什么情况了。) 7, vb中 String = Nothing and String <> Nothing fixes 这个就是“ 随风流月”提到的bug,现在修复了。 8,OR Desinger的改变 首先,在beta2中,在手工编辑dbml产生的代码中,常丢失datacontext类的不带参数的构造函数,这个bug已经修复了。然后,dbml文件中也不再保存数据库的密码。 9,xml类型的映射 beta2中,影射为XDocuments,现在更改为XElement 其他的改变也有,但是好像和我们的关系不大了。如果,你还碰到了新的问题,可以拿出来,我们大家讨论。 更多参考 Dinesh Kulkarni的文档 相关: