我们有两个数据库。当连接字符串指向第二个并且我正在进行编辑时,此异常仅被抛出。它不应该是代码的问题,因为它与第一个数据库一样正常工作。
我试过了:
try
{
context.SaveChanges();
}
catch (OptimisticConcurrencyException)
{
context.Refresh(RefreshMode.ClientWins, db.Articles);
context.SaveChanges();
}
答案 0 :(得分:0)
在尝试使用Attach()然后使用SaveChanges()组合更新记录时,我可能遇到与您使用SQLite DB及其EF提供程序(并且我也使用SQLServer DB和EF)相同的问题,相同的代码可以在SQLServer DB中正常工作)。
我发现,当您的数据库列在SQLite中具有GUID(或UniqueIdentity)并且您的模型为nvarchar时,SQLIte EF默认将其视为Binary(即,byte [])。因此,当SQLite EF提供程序尝试将GUID转换为模型(在我的情况下为字符串)时,它将失败,因为它将转换为byte []。解决方法是通过定义“ BinaryGUID = false;”来告诉SQLite EF将GUID视为TEXT(因此转换为字符串,而不是byte [])。在连接字符串(或元数据,如果您首先使用数据库)中,如下所示:
<connectionStrings>
<add name="Entities" connectionString="metadata=res://savetyping...=System.Data.SQLite.EF6;provider connection string="data source=C:\...\db.sqlite3;Version=3;BinaryGUID=false;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
链接到对我有用的解决方案: How does the SQLite Entity Framework 6 provider handle Guids?