Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Query throws Exception with Xamarin iOS -> linking issue #10207

Closed
rob2212 opened this issue Nov 2, 2017 · 15 comments
Closed

Query throws Exception with Xamarin iOS -> linking issue #10207

rob2212 opened this issue Nov 2, 2017 · 15 comments

Comments

@rob2212
Copy link

rob2212 commented Nov 2, 2017

When I query a DbSet e.g. with a simple ToList() call I get the exception shown below. The exception is only thrown on real iOS device. It works with the iOS emulator.

var test = context.Images.ToList();

Exception message: The type initializer for 'Microsoft.EntityFrameworkCore.Query.ResultOperators.Internal.TrackingExpressionNode' threw an exception.
Stack trace:   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.get_NodeTypeProvider () [0x0000a] in <0998bf911f014e7884d2695c95a67016>:0 
  at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler+<>c__DisplayClass15_0`1[TResult].<Execute>b__0 () [0x00000] in <0998bf911f014e7884d2695c95a67016>:0 
  at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc] (System.Object cacheKey, System.Func`1[TResult] compiler) [0x0001f] in <0998bf911f014e7884d2695c95a67016>:0 
  at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult] (System.Object cacheKey, System.Func`1[TResult] compiler) [0x00000] in <0998bf911f014e7884d2695c95a67016>:0 
  at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult] (System.Linq.Expressions.Expression query) [0x00069] in <0998bf911f014e7884d2695c95a67016>:0 
  at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult] (System.Linq.Expressions.Expression expression) [0x00000] in <0998bf911f014e7884d2695c95a67016>:0 
  at Remotion.Linq.QueryableBase`1[T].GetEnumerator () [0x0000c] in <4c6b24174f1a4a3a9c2e761b70716a02>:0 
  at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1[TEntity].System.Collections.Generic.IEnumerable<TEntity>.GetEnumerator () [0x00006] in <0998bf911f014e7884d2695c95a67016>:0 
  at System.Collections.Generic.List`1[T]..ctor (System.Collections.Generic.IEnumerable`1[T] collection) [0x00062] in <a89624c267f94034b6cf9aa0c56f8864>:0 
  at System.Linq.Enumerable.ToList[TSource] (System.Collections.Generic.IEnumerable`1[T] source) [0x00018] in <773264786149499a986a13db6a7d46fe>:0 
  at Erdmann.FW.LocationDatabase.DatabaseContentBuilder.Run (Erdmann.FW.LocationDatabase.LocationDbContext context) [0x00014] in E:\IRISSYS\Source\OP-Tools\Erdmann\Erdmann.FW.LocationDatabase\Erdmann.FW.LocationDatabase\DatabaseContentBuilder.cs:25 
  at Erdmann.FW.LocationDatabase.DatabaseManager.FillDatabase (Erdmann.FW.LocationDatabase.DataSources.IDataSource source) [0x0002a] in E:\IRISSYS\Source\OP-Tools\Erdmann\Erdmann.FW.LocationDatabase\Erdmann.FW.LocationDatabase\DatabaseManager.cs:64 
  at TestApp.MainViewModel.Run () [0x00049] in E:\IRISSYS\Source\OP-Tools\Erdmann\Erdmann.FW.LocationDatabase\TestApp\TestApp.Shared\MainViewModel.cs:56 

The problem seems to be the linking behavior with the Xamarin project. I've tried to disable linking for some assemblies in the iOS Xamarin projefct under iOS Build:

--linkskip=Microsoft.EntityFrameworkCore --linkskip=Microsoft.EntityFrameworkCore.Relational --linkskip=Microsoft.EntityFrameworkCore.Sqlite --linkskip=Remotion.Linq

That didn't work. However disable linking completely does work (set Link Behavior to 'Don't Link'). But this can only be a temporary workaround not a final solution for production deployment.

Further technical details

EF Core version: v2.0.0
Database Provider: Microsoft.EntityFrameworkCore.Sqlite
Operating system: Windows 10 / iOS 11.1
IDE: Visual Studio 2017 (15.4.1)

@ajcvickers
Copy link
Contributor

@rob2212 Would it be possible for you to post a code listing or project that reproduces what you are seeing? It looks like this is likely a Xamarin issue, but we would like to investigate before potentially filing an issue with them.

@rob2212
Copy link
Author

rob2212 commented Nov 7, 2017

I will prepare sample project for reproduction later on.

@rob2212
Copy link
Author

rob2212 commented Nov 8, 2017

@ajcvickers I've created a test project which you can use to reproduce the issue. I've inserted some warnings at the relevant places. Where can I upload it? Attachments here can only be 10 MB.

@ajcvickers
Copy link
Contributor

@rob2212 Two things to try:

  • Many people just creat a new github repo and put the project there
  • Clean the project and, given that NuGet can restore packages needed, the cleaned. unbuilt project may be smalll enough to attach.

@rob2212
Copy link
Author

rob2212 commented Nov 9, 2017

@ajcvickers
TestApp.zip

@eusebiu
Copy link

eusebiu commented Nov 13, 2017

Any news on this? Thanks!

@NPadrutt
Copy link

I have the same issue with the extension ToListAsync().

@eusebiu
Copy link

eusebiu commented Nov 16, 2017

After updating to 2.0.1 and call .Any(), I get: The type initializer for 'Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions' threw an exception
Inner exception: Sequence contains no matching element
at System.Linq.Enumerable.Single[TSource] (System.Collections.Generic.IEnumerable1[T] source, System.Func2[T,TResult] predicate) [0x0006b] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.3.0.47/src/mono/external/corefx/src/System.Linq/src/System/Linq/Single.cs:79
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.GetMethod (System.String name, System.Int32 parameterCount, System.Func`2[T,TResult] predicate) [0x00029] in :0
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions..cctor () [0x00011] in :0

@GeniusLead
Copy link

I have the same issue, is there any solution?

@eusebiu
Copy link

eusebiu commented Nov 22, 2017

I found an workaround (as it was blocking me to release the app), inspired by @rob2212 - use linkskip.
Set Configuration to Release, Link Framework SDK only and add these in mtouch arguments:

--linkskip=Microsoft.EntityFrameworkCore --linkskip=Microsoft.EntityFrameworkCore.Relational --linkskip=Microsoft.EntityFrameworkCore.Sqlite --linkskip=Remotion.Linq --linkskip=Microsoft.Data.Sqlite.Core --linkskip=Microsoft.EntityFrameworkCore.Sqlite.Core --linkskip=Microsoft.Extensions.DependencyInjection.Abstractions --linkskip=Microsoft.Extensions.DependencyInjection --linkskip=Microsoft.Extensions.Logging.Abstractions --linkskip=Microsoft.Extensions.Logging --linkskip=Microsoft.Extensions.Caching.Abstractions --linkskip=Microsoft.Extensions.Caching.Memory --linkskip=Microsoft.Extensions.Options --linkskip=Microsoft.Extensions.Primitives --linkskip=System.Reflection --linkskip=System.Reflection.Primitives --linkskip=System.Linq --linkskip=System.Linq.Expressions --linkskip=System.Linq.Queryable

I don't know if all are needed, but I started with EFCore dependencies and added them until it started to work.

FYI - @NPadrutt, @ajcvickers, @divega

@NPadrutt
Copy link

NPadrutt commented Nov 22, 2017

@eusebiu nice, so far it seems to work! thank you very much! :)

@ajcvickers ajcvickers modified the milestones: 2.1.0-preview1, 2.1.0 Jan 17, 2018
@ghost
Copy link

ghost commented Jan 18, 2018

Any news on this? Thanks!

@shanhongyue
Copy link

I did not encounter this problem in the iPhone X simulator, but encountered in my real iPhone X machine, which was very interesting.

@divega
Copy link
Contributor

divega commented Feb 5, 2018

This issue was moved to xamarin/xamarin-macios#3394

@divega divega closed this as completed Feb 5, 2018
@divega
Copy link
Contributor

divega commented Feb 5, 2018

Reopening to decide in triage whether we want to keep this for tracking purposes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants