Efcore: ToView fails when using a schema-ed view

Created on 28 May 2018  路  1Comment  路  Source: dotnet/efcore

Describe what is not working as expected.

When mapping to a view that has a schema specified, get an invalid object error when selecting with EF Core.

If you are seeing an exception, include the full exceptions details (message and stack trace).

```
Exception message:
Stack trace:

{
"message": "An error has occurred.",
"exceptionMessage": "Invalid object name '[Authorization].[vw_UserRoles]'.",
"exceptionType": "System.Data.SqlClient.SqlException",
"stackTrace": " at System.Data.SqlClient.SqlCommand.<>c.b__174_0(Task1 result)\r\n at System.Threading.Tasks.ContinuationResultTaskFromResultTask2.InnerInvoke()\r\n at System.Threading.Tasks.Task.Execute()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.d__17.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.EntityFrameworkCore.Query.AsyncQueryMethodProvider.FastQueryAsyncEnumerable1.FastQueryAsyncEnumerator.<MoveNext>d__9.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Collections.Generic.AsyncEnumerableHelpers.<ToArrayWithLength>d__11.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Collections.Generic.AsyncEnumerableHelpers.d__01.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at Geoplan.Domain.Relations.Persistence.RelationshipQueryRepository.d__4.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at Geoplan.Domain.Relations.RelationsApi.<LookupRolesForTheseUsers>d__9.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at SkinOnline.Web.API.Controllers.DataManager.ManageUsersController.<ListUsers>d__5.MoveNext() in C:\\_dev\\geoplan\\legacy\\geoplan-skin-online\\Geoplan.SkinOnline.Web\\API\\Controllers\\DataManager\\ManageUsersController.cs:line 43\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__11.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.d__1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ActionFilterResult.d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.AuthorizationFilterAttribute.d__3.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext()"
}

Steps to reproduce

Create a view in a schema e.g. [Authorization].[vw_UserRoles]

then create a model binding for it
modelBuilder.Query<UserRoleIdModel>().ToView($"[{Schemas.Authorization}].[vw_UserRoles]");

seems we cannot specify a schema at all, as dbo did not work either, have to have no schema
modelBuilder.Query<UserModel>().ToView("vw_UserRoles");

Further technical details

EF Core version: 2.1 rc1
Database Provider: (e.g. Microsoft.EntityFrameworkCore.SqlServer)
Operating system: Win 10 Ultimate
IDE: (e.g. Visual Studio 2017 15.72)

closed-question customer-reported

Most helpful comment

Try this:

modelBuilder
    .Query<UserRoleIdModel>()
    .ToView("vw_UserRoles", Schemas.Authorization);

>All comments

Try this:

modelBuilder
    .Query<UserRoleIdModel>()
    .ToView("vw_UserRoles", Schemas.Authorization);
Was this page helpful?
0 / 5 - 0 ratings