2017-11-03 100 views
2

我最近更新爲asp.net核心2.0。由於使用包含方法升級我所有的Linq查詢都失敗,因此它不能正確轉換爲SQL。EF核心包含方法不起作用

比如這個:

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.OracleException (0x80004005): ORA-00933: SQL 

command not properly ended at Devart.Data.Oracle.ay.b() at Devart.Data.Oracle.am.f() at Devart.Data.Oracle.am.e() at Devart.Data.Oracle.c5.a(am A_0, Int32 A_1) at Devart.Data.Oracle.c5.a(Int32 A_0, bg A_1) at Devart.Data.Oracle.OracleCommand.InternalExecute(CommandBehavior behavior, IDisposable disposable, Int32 startRecord, Int32 maxRecords, Boolean nonQuery) at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior, Boolean nonQuery) at Devart.Data.Oracle.Entity.ai.a(CommandBehavior A_0) at Devart.Common.Entity.cj.d(CommandBehavior A_0) at Devart.Data.Oracle.Entity.ai.b(CommandBehavior A_0) at System.Data.Common.DbCommand.ExecuteReader() at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary 2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary 2 parameterValues) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable 1.Enumerator.BufferlessMoveNext(Boolean buffer) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable 1.Enumerator.MoveNext() at Microsoft.EntityFrameworkCore.Query.Internal.QueryBuffer.IncludeCollection(Int32 includeId, INavigation navigation, INavigation inverseNavigation, IEntityType targetEntityType, IClrCollectionAccessor clrCollectionAccessor, IClrPropertySetter inverseClrPropertySetter, Boolean tracking, Object entity, Func 1 relatedEntitiesFactory) at lambda_method(Closure , QueryContext , Client , Object[]) at Microsoft.EntityFrameworkCore.Query.Internal.IncludeCompiler._Include[TEntity](QueryContext queryContext, TEntity entity, Object[] included, Action 3 fixup) at lambda_method(Closure , Client) at System.Linq.Enumerable.SelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable 1 source) at lambda_method(Closure , QueryContext) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass17_0`1.b__0(QueryContext qc) ORA-00933: SQL command not properly ended

我使用Devart dotconnect連接到Oracle數據庫。

+0

這裏同樣發生,最近更新到.net核心2.0。請讓我知道你的修復,如果你剛剛得到它。 – rsbavaresco

+0

這是一個devart問題,他們正在修復。 – capiono

回答

0

與EF使用多條.include()酷睿2的錯誤是固定。期待dotConnect for Oracle的下一個公共構建。

+1

可以下載dotConnect for Oracle 9.5.399的新版本:http://forums.devart.com/viewtopic.php?f=1&t=36257。 – Devart

1

是由於你的語句:

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(); 
+0

該代碼在功能上等同於OP已有的功能。進行這些更改將無法解決問題。 –

+0

謝謝克里斯蒂安,但這並不能解決問題。 – capiono