Entity framework core efcore更改修改状态以更新实体不使用子数据对象

Entity framework core efcore更改修改状态以更新实体不使用子数据对象,entity-framework-core,ef-core-3.0,Entity Framework Core,Ef Core 3.0,我使用此代码设置了一个通用存储库以进行更新 private void AttachIfNot(TEntity entityToActive) { if (_dbContext.Entry(entityToActive).State == EntityState.Detached) { _dbSet.Attach(entityToActive); } } private void UpdateEntity(TEntity entityToUpdate) {

我使用此代码设置了一个通用存储库以进行更新

private void AttachIfNot(TEntity entityToActive)
{
    if (_dbContext.Entry(entityToActive).State == EntityState.Detached)
    {
        _dbSet.Attach(entityToActive);
    }
}

private void UpdateEntity(TEntity entityToUpdate)
{
    AttachIfNot(entityToUpdate);
    _dbContext.Entry(entityToUpdate).State = EntityState.Modified;
}

它只是附加实体并将修改状态设置为保存

但是,当我使用efocre ownsone映射值对象时,updateentity函数不起作用

我发现它只在我将Valueobject设置为modified时起作用

_dbContext.Entry(entityToUpdate).State = EntityState.Modified; 
_dbContext.Entry(entityToUpdate.Valueobject).State = EntityState.Modified; 
但我很难在通用存储库中指定所有的值对象

这段代码也存在一对多或其他关系问题。 工作方式如下:

Classroom classroom = new Classroom
{
    Id = 1,
    Name = "b",
    Students = new List<Student>
    {
        new Student()
        {
            Name = "aa",
            Id = 2
         }
    }
};

if (_defaultDbContext.Entry(classroom).State == EntityState.Detached)
{
    _defaultDbContext.Classrooms.Attach(classroom);
    foreach(var stu in classroom.Students)
    {
        _defaultDbContext.Students.Attach(stu);
    }
}

_defaultDbContext.Entry(classroom).State = EntityState.Modified;
foreach (var stu in classroom.Students)
{
    _defaultDbContext.Entry(stu).State  = EntityState.Modified;
}

_defaultDbContext.SaveChanges();
实体是通过查询来的,因此将跟踪更改

但当我想更改实体时,我必须用这个实体映射配置automapper

CreateMap<EntityType, EntityType>();
CreateMap();

我认为这不是最好的解决办法。有更好的方法吗?

DbContext.Update可以解决此问题。 见:

CreateMap<EntityType, EntityType>();