值对象的可空实现 返回

SqlSugar 沟通中
11 411

当一个值对象为空时希望它的内部属性能全部自动为空吧?而不是要把它的每一个属性都设置为可空类型,因为从DDD的语义来讲,值对象时没有状态和主键的吧。
希望可以加一个配置来实现。。。

热忱回答11

  • image.png
    这样子的话,希望Address扁平化出来的列都能为可空吧,EFCore是这样设置的
    image.png

    0 回复
  • 仅供交流,我也只是提意见,我想用自定义特性来实现好像也没能实现,不值得是不是被IsOwnsOne = true拦截了

    0 回复
  • fate sta fate sta VIP0
    2025/8/12

     image.png

    0 回复
  • fate sta fate sta VIP0
    2025/8/12

    这样配置属性只要有?就是可空的。

    0 回复
  • @fate sta:感谢回复,我是这样配置了但是我不想去给Address的每一个属性都设为空吧,当Address为别的表的属性时,为空的话,它里面的属性映射成列希望也能为空吧,或者能像EFCore哪有配置,虽然EFCore也不直接支持值对象可为空,则所有属性为空,但是它有FluentAPI可以配置值对象的属性的。
    image.png
    image.png
    image.png
    就像这样,可以单独配置Student表的Address属性。
    image.png

    0 回复
  • @fate sta:好吧,如果Address作为别人的属性可为空,那么Address所有属性映射为列时也为空这确实可能不太好。因为毕竟微软也没这么做。。。。
    不过我希望能配置值对象的属性,这样可以吗?


    0 回复
  • @文学少女:因为我是这样考虑的,这个Address也有可能被其他类作为值对象?所有用特性直接在Address里面做配置不太好?
    好吧,也有可能DDD不推荐多个实体或者聚合共用一个值对象。。。。我对这方面可能理解不太深吧

    0 回复
  • fate sta fate sta VIP0
    2025/8/13

    这个AOP可以实现自个处理就行了

    0 回复
  • fate sta fate sta VIP0
    2025/8/13
    //只能是实体查询不能是匿名对象
        db.Aop.DataExecuted = (value, entity) =>
        {
                //只有行级事件
            if (entity.Entity.Type == typeof(Order)) 
            {
                var newValue=entity.GetValue(nameof(Order.Name))+"111";
                entity.SetValue(nameof(Order.Name), newValue);
            }
        };
        //查询出来的值的 name都加上了 111
        List<Order> list2 = db.Queryable<Order>().ToList();


    0 回复
  • fate sta fate sta VIP0
    2025/8/13

    可以在AOP里面自个处理。

    0 回复
  • fate sta fate sta VIP0
    2025/8/13

    如果OBJ这个对象里面的属性都是默认值那么就设置NULL

    0 回复