Entity framework EF核心包含方法不起作用

Entity framework EF核心包含方法不起作用,entity-framework,linq,asp.net-core,devart,Entity Framework,Linq,Asp.net Core,Devart,我最近更新到asp.net core 2.0。由于使用Include方法升级我的所有Linq查询都失败,因此无法将其正确转换为SQL 例如: var entities = helpTopicRepository.Entities.Include(x => x.HelpArticles).FirstOrDefault(t => topicIds.Any(a => a == t.Id)); 翻译为: SELECT x.HelpArticles.ART_ID, x.HelpArt

我最近更新到asp.net core 2.0。由于使用Include方法升级我的所有Linq查询都失败,因此无法将其正确转换为SQL

例如:

var entities = helpTopicRepository.Entities.Include(x => x.HelpArticles).FirstOrDefault(t => topicIds.Any(a => a == t.Id));
翻译为:

SELECT x.HelpArticles.ART_ID, 
x.HelpArticles.AVAILABLE, 
x.HelpArticles.CONTENT, 
x.HelpArticles.DISPLAYORDER, 
x.HelpArticles.HELPFULNO, 
x.HelpArticles.HELPFULYES, 
x.HelpArticles.KEYWORDS, 
x.HelpArticles.TITLE, 
x.HelpArticles.TOPICID
FROM HELPARTICLE x.HelpArticles 
这将导致以下错误:

命令未正确地在以下位置结束:Devart.Data.Oracle.ay.b() Devart.Data.Oracle.am.f()位于 Devart.Data.Oracle.c5.a(am a_0,Int32 a_1)位于 Devart.Data.Oracle.c5.a(Int32 a_0,bg a_1)位于 Devart.Data.Oracle.OracleCommand.InternalExecute(CommandBehavior 行为,IDisposable一次性,Int32 startRecord,Int32 maxRecords, 布尔非查询)在 Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior 行为,布尔非查询)在 Devart.Data.Oracle.Entity.ai.a(CommandBehavior a_0)位于 Devart.Common.Entity.cj.d(CommandBehavior A_0)位于 Devart.Data.Oracle.Entity.ai.b(CommandBehavior A_0)位于 System.Data.Common.DbCommand.ExecuteReader()位于 Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection 连接,DbCommandMethod executeMethod,IReadOnlyDictionary
2
参数值)在
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection
连接,IReadOnlyDictionary
2个参数值) Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
1.Enumerator.BufferlessMovenText(布尔值
缓冲区)在
Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
1.Enumerator.MoveNext() 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryBuffer.IncludeCollection(Int32 包括导航、导航、反向导航、, 客户端类型targetEntityType,IClrCollectionAccessor CLRecollectionAccessor,IClrPropertySetter反向ECLRPropertySetter, 布尔跟踪,对象实体,Func
1相关实体工厂)
lambda_方法(闭包、QueryContext、客户端、对象[])位于
Microsoft.EntityFrameworkCore.Query.Internal.IncludeCompiler.\u Include[TEntity](QueryContext)
queryContext、TEntity实体、包含的对象[]、操作
lambda_方法(闭包,客户机)
System.Linq.Enumerable.selectEnumerableTerator
2.MoveNext()位于
System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable
1源) 在lambda_方法(闭包、查询上下文)处 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.c__显示Class17_0`1.b__0(QueryContext qc)ORA-00933:SQL命令未正确结束


我正在使用Devart dotconnect连接到Oracle数据库

是由于您的声明:

var entities = helpTopicRepository.Entities.Include(x => x.HelpArticles).FirstOrDefault(t => topicIds.Any(a => a == t.Id));
假设
topicIds
是一个列表,下面是一个修复:

var entities = helpTopicRepository.Entities
    .Include(x => x.HelpArticles)
    .Where(t => topicIds.Contains(t.Id))
    .FirstOrDefault();

EF Core 2中使用multiple.Include()的错误已修复。期待下一次Oracle dotConnect的公共构建。

此代码在功能上与OP已有的代码相当。进行这些更改不会解决任何问题。同样的情况也会发生在这里,最近对.net core 2.0进行了更新。如果您刚获得修复,请告诉我您的修复。这是一个devart问题,他们正在进行修复。新版本的dotConnect for Oracle 9.5.399可供下载:。
var entities = helpTopicRepository.Entities
    .Include(x => x.HelpArticles)
    .Where(t => topicIds.Contains(t.Id))
    .FirstOrDefault();