EF+WCF怎样更新数据

 我来答
城南明月羿当年
2015-05-26 · 知道合伙人生活技巧行家
城南明月羿当年
知道合伙人生活技巧行家
采纳数:24666 获赞数:123227
计算机爱好者

向TA提问 私信TA
展开全部
以常见的权限关系来说,User\Role 2个实体是多对多关系,其POCO类似:
View Code

创建服务类似:
ServiceResult UpdateUser(User user);
这时候,我们知道,如果WCF与EF结合使用,有一些注意点:一,WCF传递的需要是POCO类,且不能循环引用(这一点通过在实体类添加[DataContract(IsReference=true)]即可),
二一个问题是EF的延迟加载和代理实例机制,导致EF查询结果并非POCO类,而是代理类,所以需要关系EF代理实例模式:Configuration.ProxyCreationEnabled = false;

现在问题来啦,如何实现UpdateUser方法呢,一般我们会用IDbSet.Attach()方法来更新,代码如:
m_DbSet.Attach(entity);
this.DbContext.Entry<T>(entity).State = EntityState.Modified;
this.DbContext.SaveChanges();
但是这时候你就会发现,由于EF为了支持WCF服务已经关闭了ProxyCreationEnabled ,所以无论如何,这里的Attach方法是不能执行成功的,
那这时候你会想,那我不采用Attach方法,先Delete实体,再重新添加行不行呢,

NO no no ,由于EF在SaveChanges的时候会根据实体关系,自动修改数据表,所以当你删除User时候的时候会删除User表以及User_Role表中的记录,此时再添加User实体的话,会向User表添加User,User_Role表添加关系,Role表添加Role(因为User.Roles的存在),
这时候你会发现Role表添加Role就不行了,因为记录已经存在了;所以这种方式也不能很好的解决问题!!

怎么办呢,我暂时也不知道怎么办,所以来此求助各位大牛~~看看有什么经验,好的处理方法!
ps:Data Services、Ria services暂时不考虑,因为我的应用需要对具体的操作进行授权!非Web系统!
今至电子科技有限公司
2024-08-23 广告
上海今至电子科技有限公司,是一家从事运维服务、系统集成和网络工程的专业公司。业务涵盖IT解决方案、网络工程、应用软件开发、系统集成、服务器虚拟化、桌面虚拟化、高性能运算、负载均衡、数据容灾备份、服务外包、IT运维等。我们的理念:诚信为本,服... 点击进入详情页
本回答由今至电子科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式