实体框架6中未更改的对象

本文关键字:对象 框架 实体 | 更新日期: 2023-09-27 18:25:15

我有silverlight应用程序。这是实体框架6的调用操作(在Open Ria Service-WCF Ria Service开源版本中)。

    public List<VaultAmount> GetCurrentVaultAmounts(Guid vaultId)
    {
        return this.DbContext.VaultAmounts
            .Include(v => v.VaultAmountQuantities)
            .Include(v => v.VaultCurrency)
            .Include(v => v.Vault)
            .Include(v => v.VaultAmountQuantities.Select(vaq => vaq.VaultCurrency))
            .Where(v => v.VaultId == vaultId && v.IsCurrent).ToList();
    }
    [Invoke]
    public void UpdateVaultRemainders(List<VaultAmountQuantity> updatedQuantities, string comment, Guid userId,
        string friendlyName,
        Guid vaultAmountId, int currencyId)
    {
        VaultAmount vaultAmount =
            this.DbContext.VaultAmounts
                .Include("Vault")
                .SingleOrDefault(va => va.VaultAmountId == vaultAmountId);
        if (vaultAmount == null && vaultAmount.Vault == null) return;
        //Get FromVault and ToVault with amounts and updatedQuantities
        List<VaultAmount> currentAmounts = GetCurrentVaultAmounts(vaultAmount.Vault.VaultId);
        //Vault vault = GetVaultWithCurrentAmountsAndQuantitiesById(vaultAmount.Vault.VaultId);
        var helper = new RemainderVAHelper(currentAmounts, userId, friendlyName, currencyId, updatedQuantities,
            comment,
            BS2VaultEventTypes.Correction);
        //................................
        foreach (var amount in currentAmounts)
        {
            if (amount.IsCurrent == false)
            {
                DbEntityEntry<VaultAmount> entityEntry = this.DbContext.Entry(amount);
                entityEntry.State = EntityState.Modified;
            }
        }
        this.DbContext.SaveChanges();
    }

RemainderVAHelper类中,我正在更改currentAmounts对象,请将IsCurrent属性设置为false。但是currentAmounts对象entityEntry.State仍然未更改。为什么?是的,我可以将它们的状态设置为Modified(就像我在方法中所做的那样),但我认为这不是一件好事。你能告诉我为什么我的对象状态没有更改为已修改吗?

实体框架6中未更改的对象

如果您没有使用更改跟踪代理,EF在您调用DetectChanges或SaveChanges(调用DetectChange)

之前无法知道您修改了属性