首页 文章

属性'InventoryItemID'是对象的关键信息的一部分,无法修改

提问于
浏览
0

我无法添加InventoryItem类型的新实例,因为ChangeTracker认为我修改了主键 . 但它正如构造函数所做的那样 .

另一方面,我可以毫无问题地添加项目 . 但是当我在创建InventoryItemType(即InventoryItem的NavigationProperty)之后插入它时,它失败了 .

我搜索,尝试,更新EF从5到6.1.1我投降了...我需要你的帮助

InventoryItemType iit = new InventoryItemType
        {
            InventoryFamilyID = 12,
            Name = checkInPackage.Name,
            Provider = shippingDestination.RelatedWarehouse.Name,
            Reference = "Paquete nº " + checkInPackage.CheckInPackageId
        };


        this.inventoryItemTypeRepository.InsertOrUpdate(iit);
        this.inventoryItemTypeRepository.Save();

        InventoryItem ii = new InventoryItem
        {
            WarehouseID = checkInPackage.WarehouseID,
            Price = 0,
            InventoryItemTypeID = iit.InventoryItemTypeID
        };


        this.inventoryItemRepository.InsertOrUpdate(ii); // th
        this.inventoryItemRepository.Save();

存储库具有:

public void InsertOrUpdate(InventoryItem inventoryitem)
    {
        if (inventoryitem.InventoryItemID == default(int)) {
            // New entity
            context.InventoryItems.Add(inventoryitem);
        } else {
            // Existing entity
            context.Entry(inventoryitem).State = EntityState.Modified;
        }
    }

EDITED WITH THE FIX:

我对关系 InventoryItemType 1到 InventoryItem n的定义不好

在InventoryItemType.cs中执行此更改后,它运行时没有错误:

public InventoryItemType()
    {
        InventoryItems = new HashSet<InventoryItem>();
    }
    public virtual ICollection<InventoryItem> InventoryItems { get; set; }

在业务逻辑方面

iit.InventoryItems.Add(
            new InventoryItem
            {
                WarehouseID = checkInPackage.WarehouseID,
                Price = 0,
                InventoryItemType = iit
            }
    );

    this.inventoryItemTypeRepository.InsertOrUpdate(iit);
    this.inventoryItemTypeRepository.Save();

1 回答

  • 1

    根据this descriptionthis one,而不是在 InventoryItem 实体中设置 InventoryItemTypeID set InventoryItemType ,也许它有效 .

    InventoryItem ii = new InventoryItem
    {
        WarehouseID = checkInPackage.WarehouseID,
        Price = 0,
        InventoryItemType = iit
    };
    

相关问题