Entity framework core Ef核心拥有一个问题';正在共享表';

Entity framework core Ef核心拥有一个问题';正在共享表';,entity-framework-core,Entity Framework Core,我使用EF core:2.26,我有以下数据模型: public interface IManeuverableAsset { OpenStateType? ManeuveredState { get; set; } } public interface IGeneratorManeuverableAsset : IManeuverableAsset { DateRange GeneratorInstallation { g

我使用EF core:2.26,我有以下数据模型:

public interface IManeuverableAsset 
    {
        OpenStateType? ManeuveredState { get; set; }

    }

    public interface IGeneratorManeuverableAsset : IManeuverableAsset
    { 
        DateRange GeneratorInstallation { get; set; }
        DateRange GeneratorRemoval { get; set; }
    }

    public class ManeuverableCabin : Entity<Guid>, IGeneratorManeuverableAsset
    {
        public Cabin Cabin { get; set; }
        public List<ManeuverableCell> Cells { get; set; } = new List<ManeuverableCell>();
        public DateRange GeneratorInstallation { get; set; }
        public DateRange GeneratorRemoval { get; set; }
    }

    public class ManeuverableCell : Entity<Guid>, IManeuverableAsset
    {
        public Cell Cell { get; set; }
        public List<ManeuverableCircuit> Circuits { get; set; } = new List<ManeuverableCircuit>();
        public OpenStateType? ManeuveredState { get; set; }

    }

    public class ManeuverableCircuit : Entity<Guid>, IGeneratorManeuverableAsset
    {
        public Circuit Circuit { get; set; }
        public OpenStateType? ManeuveredState { get; set; }
        public DateRange GeneratorInstallation { get; set; }
        public DateRange GeneratorRemoval { get; set; }
    }

   public class DateRange
    {
        public DateTime? Start { get; set; }
        public DateTime? End { get; set; }
    }
公共接口iManueVerableAsset
{
OpenStateType?机动状态{get;set;}
}
公共接口IGeneratorManeuvrableAsset:ImanueVerableAsset
{ 
DateRange GeneratorInstallation{get;set;}
DateRange GeneratorRemoval{get;set;}
}
公共级机动座舱:实体,IGeneratorManeuvLeasset
{
公共客舱{get;set;}
公共列表单元格{get;set;}=new List();
公共日期范围生成器安装{get;set;}
公共DateRange GeneratorRemoval{get;set;}
}
公共类可操作单元:实体,imaneueverableasset
{
公共单元格{get;set;}
公共列表电路{get;set;}=new List();
公共OpenStateType?机动状态{get;set;}
}
公共类可操作回路:实体,IGeneratorManeuvLeasset
{
公共电路{get;set;}
公共OpenStateType?机动状态{get;set;}
公共日期范围生成器安装{get;set;}
公共DateRange GeneratorRemoval{get;set;}
}
公共类日期范围
{
公共日期时间?开始{get;set;}
公共日期时间?结束{get;set;}
}
配置如下所示:

   public class ManeuverableCabinConfiguration : IEntityTypeConfiguration<ManeuverableCabin>
    {
        public void Configure(EntityTypeBuilder<ManeuverableCabin> builder)
        {
            //builder.HasBaseType<ManeuverableAsset>();
            builder.OwnsOne(entity => entity.GeneratorInstallation);
            builder.OwnsOne(entity => entity.GeneratorRemoval);
            builder.ToTable(nameof(ManeuverableCabin) + "s");
        }
    }

    public class ManeuverableCellConfiguration : IEntityTypeConfiguration<ManeuverableCell>
    {
        public void Configure(EntityTypeBuilder<ManeuverableCell> builder)
        {
            builder.ToTable(nameof(ManeuverableCell) + "s");
        }
    }

   public class ManeuverableCircuitConfiguration : IEntityTypeConfiguration<ManeuverableCircuit>
    {
        public void Configure(EntityTypeBuilder<ManeuverableCircuit> builder)
        {        
            builder.OwnsOne(entity => entity.GeneratorInstallation);
            builder.OwnsOne(entity => entity.GeneratorRemoval);
            builder.ToTable(nameof(ManeuverableCircuit) + "s");

        }
    }
公共类可操纵驾驶舱配置:IEntityTypeConfiguration
{
公共void配置(EntityTypeBuilder)
{
//builder.HasBaseType();
builder.OwnsOne(entity=>entity.GeneratorInstallation);
builder.OwnsOne(entity=>entity.GeneratorRemoval);
建造商:ToTable(机动驾驶舱名称)+“s”);
}
}
公共类可操作单元配置:IEntityTypeConfiguration
{
公共void配置(EntityTypeBuilder)
{
建造商:ToTable(可移动电池的名称)+“s”);
}
}
公共类可操作电路配置:IEntityTypeConfiguration
{
公共void配置(EntityTypeBuilder)
{        
builder.OwnsOne(entity=>entity.GeneratorInstallation);
builder.OwnsOne(entity=>entity.GeneratorRemoval);
ToTable(机动电路的名称)+“s”);
}
}
当我只保存一个可操纵的座舱(没有电池/电路)时,它工作正常,但是,一旦我的日期范围内有一个无值的可操纵电路,我就会出现以下错误:

“机动舱”类型的实体正在共享该表 “机动驾驶室”具有以下类型的实体 “机动座舱。发电机安装#日期范围”,但没有 具有已标记为的相同键值的此类型的实体 “添加”。考虑使用 “DbContextOptions Builder.EnableSensivedAtalogging”查看密钥 价值观。”

我的日期范围从不为空,充其量只是默认的空实例。 以下是我如何保存数据:

 public async Task SaveAsync(TEntity aggregate)
    {
        var existingAggregate = await _context.FindAsync<TEntity>(aggregate.Id);

        if (existingAggregate == null)
            await _context.AddAsync(aggregate).ConfigureAwait(false);

        await _context.SaveChangesAsync().ConfigureAwait(false);
    }
public async Task SaveAsync(tenty聚合)
{
var existingAggregate=wait_context.FindAsync(aggregate.Id);
if(existingAggregate==null)
await\u context.AddAsync(聚合).ConfigureAwait(false);
wait _context.SaveChangesAsync().configurewait(false);
}
当我在await\u context.AddAsync(aggregate).ConfigureAwait(false)上放置断点时; 我的汇总如下所示:

但当我跨过并进入SaveChangesSync时,我的对象会发生变化: 看到不同的帖子,我很确定问题是对象变为null,但我不知道为什么。。。 当然,如果我的日期范围内有值,一切都很好

有什么想法吗? 很抱歉发了这么长的邮件


谢谢

正如Ivan Stoev所说,由于使用相同实例的auto mapper中的nullsubstitute,该对象被共享。

请包含
DateRange
类和确切的EF核心版本。@Ivan Stoev完成,感谢您告诉我:)我使用2.26确保您没有在实体之间共享
DateRange
对象实例,例如,像价值对象-这是@IvanStoev你是我的救世主。。。Automapper使用相同的实例。。。我只是在t工作时一直使用新实例进行测试。。。你能把它作为答案,这样我就可以接受了吗?谢谢!