C# dbContext条目状态自动更改,导致多个引用异常

C# dbContext条目状态自动更改,导致多个引用异常,c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,我正在尝试将此类插入到数据库中 public class InventoryItem { [Key] public int InventoryItemId { get; set; } public int InStockNumber { get; set; } public int InventoryItemTypeID { get; set; } [ForeignKey("InventoryItemTypeID")] public virt

我正在尝试将此类插入到数据库中

public class InventoryItem {
    [Key]
    public int InventoryItemId { get; set; }

    public int InStockNumber { get; set; }

    public int InventoryItemTypeID { get; set; }

    [ForeignKey("InventoryItemTypeID")]
    public virtual InventoryItemType InventoryItemType { get; set; }
}
第二,经过一些业务逻辑

   inventoryItem.InventoryItemType = itemTypesRepository.Find(243);
   inventoryItem.InventoryItemTypeId = 243;
在此之后,我尝试: context.InventoryItems.Add(inventoryItem);//是的,库存项目是数据库集

但这会导致多引用异常。 如果我删除了导航属性InventoryItemType的集合,它将正常运行。但我需要它还有其他原因

所以我试着手动做一些事情

    var entry = context.Entry(inventoryitem);

    // New entity
    if (entry.State == EntityState.Detached)
    {
        entry.State = EntityState.Added;
    }
问题是do context.Entry的事实会自动添加条目和行 entry.State=EntitySate.Added

导致多引用异常


我可以重写业务逻辑,不设置导航属性。但是,有人能帮我用另一种方法来避免这个问题吗?

这应该做什么呢
inventoryItem.InventoryItemId=inventoryItem.InventoryItemTypeId
?您正在将主键的值设置为指向另一个表的外键的值。这看起来不太好。@WiktorZychla对不起,是打字错误。现在已经解决了我被你的问题弄糊涂了,看起来你正在尝试向上下文中添加一个项目,而你刚刚从上下文中检索到了该项目。如果你试图这样做,你会得到一个错误。@AlbertoLeón:现在看起来更糟,你给自己分配了相同的字段值。我认为你需要通过显示不起作用的代码和你得到的实际错误消息来澄清你的问题。但是,在黑暗中摸索,我想知道这篇文章是否会有所帮助:为什么实体框架会将现有对象重新插入到我的数据库中?msdn.microsoft.com/en-us/magazine/dn166926.aspx