惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
I
InfoQ
B
Blog
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
GbyAI
GbyAI
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
量子位
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
美团技术团队
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
罗磊的独立博客
博客园 - 聂微东
IT之家
IT之家

博客园 - Tom Song

招聘net 开发 RAR 协议- 探针协议 杀人游戏系列 之三 提供游戏代码下载 杀人游戏系列 之二 Linq To Sql进阶系列 -目录导航 C# 3.0入门系列-目录导航 杀人游戏系列 之一 谈Linq To Sql的优劣--纯个人观点 Linq To Sql进阶系列(七)动态查询续及CLR与SQL在某些细节上的差别 Linq To Sql进阶系列(六)用object的动态查询与保存log篇 数据库中使用 Synonym和openquery SQL 语句中特殊字符的处理及预防sql 注射 Linq To Sql进阶系列(五)Store Procedure篇 C# 3.0与Linq To Sql的学习方法--浅谈 C#3.0入门系列(十二)-Lambda表达式中Lifting Linq To Sql进阶系列(四)User Define Function篇 Linq To Sql进阶系列(三)CUD和Log C#3.0入门系列(十一)-之In, Like操作 Linq To Sql进阶系列(二)M:M关系
Linq To Sql 项目从Beta迁移到RTM注意事项
Tom Song · 2007-11-28 · via 博客园 - Tom Song

Linq To Sql 项目从Beta迁移到RTM要注意那些事项呢?RTM相对beta又做了那些变动呢?本文为你揭开这些问题。这里,我们只谈项目中经常碰到的,其他的略去不写。你若是有疑问,可以回贴问,我再帮你找。最后,放出修正文档。特别感谢伍迷TX的督促。

1,函数名称的改变
在添加,更新和删除实体对象时,本blog中的Linq To Sql进阶系列(三)CUD和Log 一文中所提及的,其函数名更改如下。

Beta 2 Name

RTM Name

Add

InsertOnSubmit

AddAll

InsertAllOnSubmit

Remove

DeleteOnSubmit

RemoveAll

DeleteAllOnSubmit

还有其他函数名称的改变,但是,好像本blog从来都没有提过,所以,不做太多说明。
We have also changed the members of ChangeSet to match these new names:

Beta 2 Name

RTM Name

AddedEntities

Inserts

RemovedEntities

Deletes

ModifiedEntities

Updates

2, dbml编码
以前是16,现在是8。因为这个也可能让你的程序编译不过。
<?xml version="1.0" encoding="utf-8"?>

3,一个叫DataSetExtensions的Assembly去掉
这个好像只在asp.net的程序里才会有这个问题,在你的web.config里,如果有这个问题,去掉这段。这个assembly早就没有了。
<add assembly="System.Data.DataSetExtensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

4, Attach函数的改变
Attach函数用来在不同的datacontext间,传递实体对象。现在这里做了更改。
The solution is add db.DeferredLoadingEnabled = false; to the code to void deferred loading in the first datacontext.

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…

}


5,查询语法中不允许再显示构造实体对象
比如,在beta2中,你可以这么玩, 

  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中,如果,你移除从某一表中移除一个实体对象,你须手动从该实体对象的EntitySets 移除实体,并遵从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的文档 

 LINQ to SQL Beta 2 to RTM Breaking Changes

相关:
C# 3.0入门系列-目录导航
Linq To Sql进阶系列 -目录导航