Entity framework core 实体核心保存多级实体,最后一个实体为基础数据

Entity framework core 实体核心保存多级实体,最后一个实体为基础数据,entity-framework-core,Entity Framework Core,父表 public class Indent { public int ID { get; set;} public virtual ICollection<IndentTable> IndentTableCollection { get; set; } public virtual int StoreID { get; set; } } 主表在创建缩进或缩进表之前已可用 public class MasterRegister {

父表

public class Indent 
{   
    public int ID { get; set;}
    public virtual ICollection<IndentTable> IndentTableCollection { get; 
     set; }

    public virtual int StoreID { get; set; } 
}
主表在创建缩进或缩进表之前已可用

public class MasterRegister 
{       
    public int ID { get; set;}

    public virtual string MaterialNameWithDescription { get; set; }

    [StringLength(20)]
    public virtual string MaterialUnit { get; set; }

}
主寄存器已创建。新创建的缩进只需添加缩进和缩进表,但实体freamework也会尝试添加主寄存器

我需要使用master创建新的缩进和缩进表,但master保持不变


任何建议。

谢谢斯密特,我是通过在谷歌上搜索相关内容获得ans的

foreach (var indentTable in indent.IndentTableCollection)
        {

            MAS.Core.Domain.Store.MasterRegister.MasterRegister masterregister = indentTable.MasterRegister;
            _context.Entry(masterregister).State = EntityState.Unchanged;
        }

使用此代码,不会更改为masterregister,一切正常。

谢谢Smit,我通过在谷歌上搜索相关内容获得了ans

foreach (var indentTable in indent.IndentTableCollection)
        {

            MAS.Core.Domain.Store.MasterRegister.MasterRegister masterregister = indentTable.MasterRegister;
            _context.Entry(masterregister).State = EntityState.Unchanged;
        }

此代码不会更改为masterregister,一切正常。

如果数据库中已存在Master,则需要将IndentTable中的FK属性设置为Master的ID,或者从数据库中获取Master并将其分配给IndentTable中的导航属性。实体框架添加indent,IndentTable中的Master register ID为外键,实体要做的另一件事是尝试添加新的主寄存器条目,但不希望添加。不应对主寄存器采取任何操作。如果数据库中已存在主寄存器,则需要将IndentTable中的FK属性设置为主寄存器ID,或者从数据库中提取主寄存器,并将其分配给中的导航属性实体框架添加缩进,将主寄存器id作为外键的缩进表,实体额外做的一件事是尝试添加新的主寄存器条目,但添加不可取,不应对主寄存器采取任何操作。