linq直接执行 sql有没么坏处
为什么不都用linq直接执行sql。
var query=from a in Plan
join c in Contract on a.ID equlas c.ID
join d in ContractSub on c.SupID equlas d.ID
where c.MType==3 && a.ID==aid
select d;
db.ContractSub.DeleteAllOnSubmit(query);
db.SubmitChanges();
这个批量删除的db是什么
需要添加 using (NorthwindDataContext dc = new NorthwindDataContext())这个吗
这个添加进去又说缺少引用命名空间。
希望得到详解 谢谢了
------解决方案--------------------Plan Contract ContractSub
从哪里来的。
------解决方案--------------------为什么不都用linq直接执行sql。
因为linq是和数据库无关的,而sql虽然说的统一的,但每个数据库都有自己的特定函数什么的
你一旦使用了sql就说明和某个数据库绑在一起了,当然我们做项目是很少换数据库的~
再说现在已经进入了DDD 领域驱动设计什么的 数据库也有nosql数据库,所以sql也许以后被淘汰吧
但现在,为了效率,非要用sql不可的时候,那就用吧
另外经验所以,最好不要物理删除,在表中添加一个IsDeleted字段什么的,来标记这条数据已经删除了就好
var query=from a in Plan
join c in Contract on a.ID equlas c.ID
join d in ContractSub on c.SupID equlas d.ID
where c.MType==3 && a.ID==aid
select d;
db.ContractSub.DeleteAllOnSubmit(query);
db.SubmitChanges();
这个批量删除的db是什么
query=符合条件的d(ContractSub) 所以是删除d
using (NorthwindDataContext dc = new NorthwindDataContext())
看
http://www.cnblogs.com/mecity/archive/2011/07/17/2108508.html
第四点
------解决方案--------------------删除之后调用 SubmitChanges
------解决方案--------------------1. 这个批量删除的db是什么
是的
2. 需要添加 using (NorthwindDataContext dc = new NorthwindDataContext())这个吗
需要using
3. 这个添加进去又说缺少引用命名空间。
那你就添加引用命名空间,很正常呀
------解决方案--------------------using System.Linq;
------解决方案--------------------DeleteAllOnSubmit是linq to sql中的方法,EF中是不能用的。
ef中你可以用循环调用DeleteObject方法,或者把它做成一个扩展方法:
public static void DeleteObjects<TEntity>(this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class
{
foreach (var entity in data)
set.DeleteObject(entity);
}