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系统!

转载于:https://www.cnblogs.com/Ruiky/archive/2012/12/28/2837655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值