.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才行 |