最近使用DDD+EFCore时,使用EFCore提供的OwnsOne或者OwnsMany关联值对象保存数据,没想到遇到一个很奇怪的问题:值对象中的值竟然无法被EFCore保存!也没有抛出任何异常!我瞬间惊呆了!

  准确说,这里说的应该碰到的两个问题

  1、值对象中所有的数值数据都无法保存更新

  2、值对象中的数据0无法保存更新

  这两个问题初看有点摸不着头脑,后来不断的尝试,通过简单的打印SQL,发现了一些端倪,但是保存不了问什么不抛出异常呢?这让人有些费解,有点头大,决定先做个笔记,以后找个时间再去看看源码找找答案。

  首先,我创建了一个.net core控制台项目,尝试的.net core版本是3.1.10,数据库使用的是mysql(不知道是否与数据库有关),然后使用NUGET安装了如下包:  

    Microsoft.EntityFrameworkCore
    Microsoft.EntityFrameworkCore.Tools
    Microsoft.Extensions.Logging.Console
    Pomelo.EntityFrameworkCore.MySql

  然后创建如下文件:  

  
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace ConsoleApp8
    {
        public class MyTable
        {
            public MyTable()
            {
                MyOwns = new MyOwns();
            }
            public int Id { get; set; }
            public decimal DecimalValue1 { get; set; }
            public decimal DecimalValue2 { get; set; }
    
            public MyOwns MyOwns { get; set; }
        }
        public class MyOwns
        {
            public MyOwns() { }
            public MyOwns(decimal decimalValue1, decimal decimalValue2)
            {
                DecimalValue1 = decimalValue1;
                DecimalValue2 = decimalValue2;
            }
            public decimal DecimalValue1 { get; private set; }
            public decimal DecimalValue2 { get; private set; }
    
            public void Update(decimal decimalValue1, decimal decimalValue2)
            {
                DecimalValue1 = decimalValue1;
                DecimalValue2 = decimalValue2;
            }
        }
    
    }
MyTable.cs

相关文章: