代码改变世界

EF 系统学习

2011-03-24 01:52  coodoing  阅读(952)  评论(1编辑  收藏  举报

   EF中几个重要的,如ObjectContext、ObjectQuery、、EntityClient、Linq to Entity以及ESQL相关处理。而linq只是一个技术的应用。

   EF并发冲突【Fixed】,并发处理;继承,多表关联;事务,存储过程处理;复杂类型处理。

   具体项目应用过程中队EF的应用;效率,解耦;还有就是EF优化---缓存。GetObjectByKey、延迟加载、CompiledQuery。。。。

   linq to entity【objectcontext】与linq to sql【datacontext】及entityclient

 

   

System.Data.Common.DbTransaction与System.Transactions.TransactionScope

TransactionScope可解决[死锁(两个Context使用DbTransaction)]

可解决死锁TransactionScope代码段;

 
using (System.Transactions.TransactionScope tc = new TransactionScope()) { try{ myContext context1 = new myContext(); DBItem item1 = new DBItem(); item1.ItemID = "w"; item1.ItemMatter = "wxwinter"; context1.AddObject("DBItem", item1); context1.SaveChanges(); myContext context2 = new myContext(); DBItem item2 = new DBItem(); item2.ItemID = "w"; item2.ItemMatter = "wxd"; context2.AddObject("DBItem", item2); context2.SaveChanges(); tc.Complete(); } catch{ } }

DbTransaction代码段:

myContext context1 = new myContext(); DBItem item1 = new DBItem(); item1.ItemID = "w"; item1.ItemMatter = "wxwinter"; context1.AddObject("DBItem", item1); if (context1.Connection.State != ConnectionState.Open) { context1.Connection.Open(); } System.Data.Common.DbTransaction tran = context1.Connection.BeginTransaction(); context1.SaveChanges(); try{ myContext context2 = new myContext(); DBItem item2 = new DBItem(); item2.ItemID = "w"; item2.ItemMatter = "wxd"; context2.AddObject("DBItem", item2); context2.SaveChanges(); tran.Commit(); } catch{ tran.Rollback(); }