Entity framework EF核心包含方法不起作用
我最近更新到asp.net core 2.0。由于使用Include方法升级我的所有Linq查询都失败,因此无法将其正确转换为SQL 例如: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
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,IReadOnlyDictionary2
参数值)在
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection
连接,IReadOnlyDictionary
2个参数值)
Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.BufferlessMovenText(布尔值
缓冲区)在
Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
1.Enumerator.MoveNext()
在
Microsoft.EntityFrameworkCore.Query.Internal.QueryBuffer.IncludeCollection(Int32
包括导航、导航、反向导航、,
客户端类型targetEntityType,IClrCollectionAccessor
CLRecollectionAccessor,IClrPropertySetter反向ECLRPropertySetter,
布尔跟踪,对象实体,Func1相关实体工厂)
lambda_方法(闭包、QueryContext、客户端、对象[])位于
Microsoft.EntityFrameworkCore.Query.Internal.IncludeCompiler.\u Include[TEntity](QueryContext)
queryContext、TEntity实体、包含的对象[]、操作
lambda_方法(闭包,客户机)
System.Linq.Enumerable.selectEnumerableTerator2.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();