EFCore:关于DDD中值对象(Owns)无法更新数值

EFCore:关于DDD中值对象(Owns)无法更新数值 - 没有星星的夏季 - 博客园

//修改数据
  using (var db = new DemoMigrationsDbContextFactory().CreateDbContext(args))
            {
                var myTable = db.MyTable.Find(1);
                myTable.DecimalValue1 = 10m;
                myTable.DecimalValue2 = 20m;
                //myTable.MyOwns = new MyOwns(10m, 20m); //正确用法
                myTable.MyOwns.Update(10m, 20m);    //错误用法,值对象应该赋值,不应该修改其里面的值!
                db.SaveChanges();
            }

  总结

  DDD(领域驱动设计)是应对复杂软件设计的利器,而EFCore为DDD中的实体,值类型等持久化提供了非常方便的解决方案,但是在使用时,我们要切记:

  1、值对象要当做和int,String,DateTime等类型一样使用,哪怕是修改值对象中一个属性,也需要从新创建一个值对象!

  2、EFCore提供的OwnsOne或者OwnsMany方法关联的值对象中的属性默认是可空的,而对实体则是会根据属性类型是否可空而定,所以使用时要根据自己的需求而定。

  3、EFCore提供的OwnsOne或者OwnsMany方法关联的值对象中的属性尽可能不要设置默认值,这里笔者只是用decimal类型碰到了,但是不排除还有其它类型也会有这样的问题

  4、目前这几点在.net 5.0简单测试过了,结果也是一样,那么估计是有意这么做的,所以大家使用时多留意吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值