zoukankan      html  css  js  c++  java
  • Linq To Sql 项目从Beta迁移到RTM注意事项

    在rtm中使用linq时,发现有些许不同,于是查询到了下面这篇比较详细的文章,描述了迁移时应该注意的事项:


    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的文档 



    上面文章来源于:Tom Song
  • 相关阅读:
    Mix 10 上的asp.net mvc 2的相关Session
    Vista、XP SP2主流支持即将终止
    向Visual Studio 2010迁移的电子书
    ASP.NET MVC 2 转换工具
    Javascript瘦身工具AJAX Minifier
    微软公司的安全开发周期模型
    User Experience Kit
    乐在其中设计模式(C#) 迭代器模式(Iterator Pattern)
    [翻译]使用ASP.NET AJAX让GridView的数据行显示提示框(ToolTip)
    [翻译]使用ASP.NET AJAX实现幻灯片效果
  • 原文地址:https://www.cnblogs.com/EasyLive2006/p/1142045.html
Copyright © 2011-2022 走看看