entity framework 如何高效对多表操作

guolucky2003 2011-11-14 09:03:46
比如说验证登录后要对A、B、C、D表进行更新,E、F、G做数据插入,我现在的做法是:

if(mymember.isuser(uid))
{
DBnameEntities db;
db = new DBnameEntities();
var objA = db.A.Where(t => t.uid == uid).FirstOrDefault();
...
db.SaveChanges();

db = new DBnameEntities();
var objB = db.B.Where(t => t.uid == uid).FirstOrDefault();
...
db.SaveChanges();

db = new DBnameEntities();
var objC = db.C.Where(t => t.uid == uid).FirstOrDefault();
...
db.SaveChanges();

db = new DBnameEntities();
var objD = db.D.Where(t => t.uid == uid).FirstOrDefault();
...
db.SaveChanges();
}
.........
数据插入也差不多做法,这里省


因为objA、objB、objC、objD的获取分别是封装到4个类中的,所以才有4个new DBnameEntities()
(这4个类分别负责ABCD表的增删改查工作),但现在是我登录时间很长,要将4个表更新,3个表做插入
不知大家是怎样解决的?
...全文
383 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
风骑士之怒 2011-11-14
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/system.threading.tasks.task.aspx
guolucky2003 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sandy945 的回复:]

更新出错你打算如何处理?
[/Quote]
按我理解using(DBnameEntities db= new DBnameEntities()){}
本身就支持事务,回滚功能吧,除非你有多个db,需要用到using (TransactionScope scope = new TransactionScope()){}

登录后如果更新或插入失败就回滚,什么都不做了,只要用户能登进后台页就可以了.
阿非 2011-11-14
  • 打赏
  • 举报
回复
更新出错你打算如何处理?
guolucky2003 2011-11-14
  • 打赏
  • 举报
回复
我在想能不能只要登录成功就直接跳转到后台,更新和插入工作由后台线程去做,这样用户不会感到登录得很慢,但对线程不是太了解,不知是否可行?
阿非 2011-11-14
  • 打赏
  • 举报
回复
它们是属于一个处理单元的,自然要使用事务,或者类似事务的写法.
q107770540 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 findcaiyzh 的回复:]
是不是应该只调用一次db.SaveChanges();会好点。
[/Quote]
++


if(mymember.isuser(uid))
{
using(DBnameEntities db= new DBnameEntities())
{
var objA = db.A.SingleOrDefault(t => t.uid == uid);
...

var objB = db.B.SingleOrDefault(t => t.uid == uid);
...


var objC = db.C.SingleOrDefault(t => t.uid == uid);
...


var objD = db.D.SingleOrDefault(t => t.uid == uid);
...
db.SaveChanges();
}
}

宝_爸 2011-11-14
  • 打赏
  • 举报
回复
是不是应该只调用一次db.SaveChanges();会好点。
ruanwei1987 2011-11-14
  • 打赏
  • 举报
回复
用存储过程

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧