View ADO.NET实体中的ObjectContext.SaveChanges()存在问题

View ADO.NET实体中的ObjectContext.SaveChanges()存在问题,view,ado.net,entities,View,Ado.net,Entities,使用映射到存储过程的视图更新/插入/删除数据时,我遇到以下问题: 我有一个名为tbCurrenciesRates的表,在这个表中我列出了每种货币与另一种货币的汇率,但如果我更新美元/欧元货币对的汇率,我也必须更新欧元/美元对的价值 我在ADO.NET entities 4.0中使用了到tbCurrenciesRates表的直接映射,框架在其中生成了更新/插入/删除记录所需的查询。我创建了一个新的对象上下文,其中没有实体加载到CurrencySrates集中,然后我将CurrencyRate对象传

使用映射到存储过程的视图更新/插入/删除数据时,我遇到以下问题:

我有一个名为tbCurrenciesRates的表,在这个表中我列出了每种货币与另一种货币的汇率,但如果我更新美元/欧元货币对的汇率,我也必须更新欧元/美元对的价值

我在ADO.NET entities 4.0中使用了到tbCurrenciesRates表的直接映射,框架在其中生成了更新/插入/删除记录所需的查询。我创建了一个新的对象上下文,其中没有实体加载到CurrencySrates集中,然后我将CurrencyRate对象传递给美元/欧元汇率,以执行以下操作:

我使用linq查询欧元/美元对。 我更新了它的价格 我保存更改。 在这之前一切都很顺利 接下来,我附加传递的美元/欧元汇率的CurrencyRate,并再次调用SaveChanges

使用对表的直接访问,一切都很顺利,但是当我用视图替换表时,我添加了所有必需的存储过程映射以进行插入/更新/删除,框架抛出一个异常,表示附加的美元/欧元汇率的CurrencyRate已经存在

请注意,如果我使用a表而不是视图,一切都会顺利进行。此错误仅在使用视图以及第二次调用SaveChanges时发生,尽管我使用了新的对象上下文

问题是,在ADO.NET实体中使用表和视图有什么区别,如果框架使用视图访问数据,那么在执行更新操作时,框架是否会查询数据库中的所有实体

代码如下:

            using (ICurrenciesRepository repository = NewCurrenciesRepository())
            {
                SetLastChangedDate(rate);
                CurrencyRate alternative = this.ProcessChangedCurrencyRate(rate, repository); //This performs the update correctly
                updates.Add(repository.UpdateCurrencyRate(rate)); //this fails to attach and update the rate object although I use a new repository and the rate was gotten  de-attached from another object context.

                if (alternative != null)
                    updates.Add(alternative);

                return updates;

            }

解决了。由于某种原因,当我从表切换到视图时,EF无法重新生成代码。我删除了存储过程和实体,然后通过数据库中的更新模型再次添加它们,之后一切都按预期工作