View ADO.NET实体中的ObjectContext.SaveChanges()存在问题
使用映射到存储过程的视图更新/插入/删除数据时,我遇到以下问题: 我有一个名为tbCurrenciesRates的表,在这个表中我列出了每种货币与另一种货币的汇率,但如果我更新美元/欧元货币对的汇率,我也必须更新欧元/美元对的价值 我在ADO.NET entities 4.0中使用了到tbCurrenciesRates表的直接映射,框架在其中生成了更新/插入/删除记录所需的查询。我创建了一个新的对象上下文,其中没有实体加载到CurrencySrates集中,然后我将CurrencyRate对象传递给美元/欧元汇率,以执行以下操作: 我使用linq查询欧元/美元对。 我更新了它的价格 我保存更改。 在这之前一切都很顺利 接下来,我附加传递的美元/欧元汇率的CurrencyRate,并再次调用SaveChanges 使用对表的直接访问,一切都很顺利,但是当我用视图替换表时,我添加了所有必需的存储过程映射以进行插入/更新/删除,框架抛出一个异常,表示附加的美元/欧元汇率的CurrencyRate已经存在 请注意,如果我使用a表而不是视图,一切都会顺利进行。此错误仅在使用视图以及第二次调用SaveChanges时发生,尽管我使用了新的对象上下文 问题是,在ADO.NET实体中使用表和视图有什么区别,如果框架使用视图访问数据,那么在执行更新操作时,框架是否会查询数据库中的所有实体 代码如下:View ADO.NET实体中的ObjectContext.SaveChanges()存在问题,view,ado.net,entities,View,Ado.net,Entities,使用映射到存储过程的视图更新/插入/删除数据时,我遇到以下问题: 我有一个名为tbCurrenciesRates的表,在这个表中我列出了每种货币与另一种货币的汇率,但如果我更新美元/欧元货币对的汇率,我也必须更新欧元/美元对的价值 我在ADO.NET entities 4.0中使用了到tbCurrenciesRates表的直接映射,框架在其中生成了更新/插入/删除记录所需的查询。我创建了一个新的对象上下文,其中没有实体加载到CurrencySrates集中,然后我将CurrencyRate对象传
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无法重新生成代码。我删除了存储过程和实体,然后通过数据库中的更新模型再次添加它们,之后一切都按预期工作