C# 无法使用Devart.Data.Oracle.EFCore保存.NET 5 EF Core中的更改
我目前正在开发一个ASP.NET 5.0应用程序-我将该应用程序从.NET3.1迁移到.NET 5.0。我使用Entity Framework Core和Devart.Data.Oracle.EFCore连接到Oracle数据库 我试图用字符串值保存一个简单记录,当我调用Context.saveChangesSync()方法时,我得到了以下错误:序列不包含任何元素,奇怪的是异常的来源是System.Linq=>System.Linq.ThrowHelper.ThrowNoElementsException()。有一个StackTrace,但没有详细的内部异常消息 我在存储库中的保存方法如下所示:C# 无法使用Devart.Data.Oracle.EFCore保存.NET 5 EF Core中的更改,c#,oracle,entity-framework,devart,.net-5,C#,Oracle,Entity Framework,Devart,.net 5,我目前正在开发一个ASP.NET 5.0应用程序-我将该应用程序从.NET3.1迁移到.NET 5.0。我使用Entity Framework Core和Devart.Data.Oracle.EFCore连接到Oracle数据库 我试图用字符串值保存一个简单记录,当我调用Context.saveChangesSync()方法时,我得到了以下错误:序列不包含任何元素,奇怪的是异常的来源是System.Linq=>System.Linq.ThrowHelper.ThrowNoElementsExce
public async Task<T> Add(T entity)
{
// ...
await Context.AddAsync<T>(entity);
await Context.SaveChangesAsync();
return entity;
}
public class Tree
{
public int Id { get; set; }
public string Name { get; set; }
}
Column_Name | Data_Type
------------------------
ID | NUMBER(10,0)
NAME | NCLOB
树实体配置如下所示(用EF Core搭建):
这很奇怪,因为在我将我的应用程序移植到.NET5.0并更新所有NuGet软件包之前,它就工作了
我跟踪到以下NuGet软件包更新中的错误:
我无法单独更新Devart.Data.Oracle.EFCore,因为它依赖于下面列出的Microsoft NuGet软件包。我必须立即更新所有5个NuGet包
在这个NuGet包更新之后,我不能再保存实体了
也许我的配置中遗漏了什么
你知道如何解决这个问题吗?在EF Core 5中插入或更新时抛出“Sequence contains no elements”(序列不包含任何元素)的错误已经修复。我们将在本周发布新的Oracle dotConnect公共版本。发布抛出的实际代码和完整异常,而不是“类似这样的东西”。看起来您在EF上放置了一个“通用存储库”,尽管EF不仅实现了存储库,还实现了工作单元<代码>保存更改保存所有挂起的更改,而不仅仅是最后一个更改。这使得试图立即保存的
Add
方法成为一个有缺陷的方法-充其量,它的性能非常差,并且会破坏UoW。最坏的情况是,它可以执行42次删除和67次更新以及插入。要了解为什么使用“存储库”是个坏主意,请查看Gunnar Peipman的。至于异常,序列不包含任何元素
通常是从Single()
或其他期望找到至少一个结果的调用中抛出的。绝对不是Add
(不调用数据库)或SaveChanges
。异常的堆栈跟踪将显示调用的方法。这不是保存问题。您没有连接到数据库。当应用程序启动时,它从数据库获取最新数据。如果您没有获得任何数据,则在保存时会出现错误“序列不包含元素”。请参阅:Oracle 9.14.1160的新版本dotConnect现在可供下载:。
public virtual DbSet<Tree> Trees { get; set; }
Column_Name | Data_Type
------------------------
ID | NUMBER(10,0)
NAME | NCLOB