Categories

Links

.NET Framework 3.5 June 2007 中linq to sql 的新东西

.NET Framework 3.5 June 2007  中linq to sql 的新东西


1. 现在能够支持IDataErrorInfo接口了
早先主要是entity类不 支持this 索引属性


2. DataContext有个获得ChangeSet的方式了,大家可以看看早先是如何 通过reflect来获取的
http://dotnetslackers.com/articles/csharp/GettingChangedEntitiesFromLINQToSQLDataContext.aspx


现在就可以使用


  ChangeSet changeSet=db.GetChangeSet();
  foreach(Object obj in changeSet.RemovedEntities){
  }
  foreach(Object obj in changeSet.ModifiedEntities){
  }
  foreach(Object obj in changeSet.AddedEntities){
  }
 
3. entity的 OnValidate方法
在DataContext.SubmitChanges时触发,不过在我测试中发现很奇怪,就是entity没有改变它也触发了!!要是OnValidate中有访问数据库的行为,那还不要命,如果datacontext中有大量的entity的话.



写法很简单
public class YourEntity{


 private void OnValidate(){
  //你的validate逻辑
 }
}


 同样你可以实现OnLoaded ,这个方法在entity被load时被调用,在sqlmetal生成的代码中,OnValidate,OnLoaded是作为partial 方法声明的.


4. DataContext.CommandTimeout 


代理provider的CommandTimeout,其作用就不多说了


 


5. sqlmetal 生成的代码,有很大改变,现在,他为每一个属性都生成OnxxChanging和OnxxChanged partial method ,通过在构造函数中调用OnCreated partial 方法,你可以在partial  class 中实现改方法来达到类似DataTable.NewRow的效果. 注意 sqlmetal现在生成的代码使用了partial method 特性,关于partial method 大家可以参见 http://www.infoq.com/cn/news/2007/04/PartialMethods


 


以下是一些随手发现的东西


命名空间有改变,现在TableAttribute都被移动到Sytem.Data.Linq.Mapping,而StoreProcedureAttribute已经被删除,只使用Function


原来的System.Data.Linq.IPropertyChanging接口现在被移到到了System.ComponentModel中


IQueryable 已经没有CreateQuery,Execute方法了,现在这些由IQueryProvider的实现来完成,原来的动态查询的例子,source.CreateQuery,source.Execute都要相应的改为 source.Provider.CreateQuery,source.Provider.Execute才行

[2007-07-09 23:00:40 | jiangjianxiao]

comments


Powered by Google App Engine