zoukankan      html  css  js  c++  java
  • EntityFramework:值语义的实体如何修改?

    背景

    现在很流行值对象,值对象有如下特点:开发简单、使用简单和多线程安全。我试着让 EntityFramework 中的实体保持值语义,这样的话,对值语义实体的修改就应当等于“整体替换”,好像有点问题,大家给点意见。

    值语义的 OrderItem

    代码

    1         public void UpdateOrderItem(Guid productId, int quantity)
    2         {
    3             var item = this.OrderItemCollection.First(x => x.ProductId == productId);
    4 
    5             this.RemoveOrderItem(productId);
    6 
    7             this.AddOrderItem(item.ChangeQuantity(quantity));
    8         }

    上边的代码运行会失败,提示:主键重复,查看生成的 SQL 会发现:“先执行 insert,后执行 delete”。

    局部范围的修改权限

    既然没办法保持绝对的值语义,我们可以将修改的访问控制级别设置为最低:internal,看代码:

    1         public void UpdateOrderItem(Guid productId, int quantity)
    2         {
    3             var item = this.OrderItemCollection.First(x => x.ProductId == productId);
    4 
    5             this.Total -= item.Subtotal;
    6             item.ChangeQuantity(quantity);
    7             this.Total += item.Subtotal;
    8         }

    上边代码中 ChangeQUantity 的访问级别为 internal。

    备注

    有好思路的朋友给点建议。

  • 相关阅读:
    满屏的宽高纯CSS布局
    截屏上传插件开发流程
    COM ACTIVEX 中的BSTR 类型与其它类型转换
    线程中访问控件
    OOP三言两语
    通过iframe上传
    历年作品点评
    每周进度及工作量统计2016090820160915
    英文词频统计的java实现方法
    四人小组项目——连连看
  • 原文地址:https://www.cnblogs.com/happyframework/p/3367562.html
Copyright © 2011-2022 走看看