1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Ошибка при сложном запросе к БД (не найден столбец PROGRAMMId)22.11.2019, 09:18. Показов 4803. Ответов 50
Метки нет (Все метки)
Работаю по примеру Модели со сложной структурой
Есть две таблицы SPR_PROGRAM (названия программ) и SPR_FINANS_PROGRAM (суммы по программе). Хочу вывести на одной странице таблицу в которой будет список программ с суммой по каждой из них. Таким образом пример подходит, где Player это мои программы, а Team - суммы (суммы могут быть разными, т.к. имеют дополнительный атрибут по статусу - утверждена/проектная и т.д.). Модель
Кликните здесь для просмотра всего текста
Таблица SPR_PROGRAM
Контролер. Для вывода таблицы использую Index(). HTML шаблон думаю приводить нет смысла.
Код
+ $exception {"Недопустимое имя столбца \"SPR_PROGRAMId\".\r\nНедопустимое имя столбца \"SPR_PROGRAMId\"."} Microsoft.Data.SqlClient.SqlException Вроде все что видел, уже проверил. Контекст работает. Модели работают - простые данные получаются без проблем. Сложный запрос вроде как в примере. Почему при сложном запросе происходит объединение имени таблицы и столбца, я не понимаю.
0
|
22.11.2019, 09:18 | |
Ответы с готовыми решениями:
50
Сортировка в сложном запросе Переменная в переменной в сложном запросе к БД. SQLLite3: Boolean в сложном select запросе Примение LIKE к составному полю в сложном запросе (с inner join) |
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
27.11.2019, 09:34 | 21 |
Это можно посмотреть средствами самой СУБД или утилит сопутствующих. Если у вас стоит SQL Management Studio, то с ним ставится и профилировщик:
Там все запросы видны. По ним вы много можете узнать о EF.
1
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
27.11.2019, 09:48 [ТС] | 22 |
Код
info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [t].[Id], [t].[NAME], [s0].[Id], [s0].[NAME], [s0].[SprOrgId], [s0].[SprStatusProgId] FROM ( SELECT TOP(1) [s].[Id], [s].[NAME] FROM [SprOrg] AS [s] WHERE CONVERT(VARCHAR(36), [s].[Id]) = N'F226979C-890F-EA11-9C1D-04D4C46926FF' ) AS [t] LEFT JOIN [SprProg] AS [s0] ON [t].[Id] = [s0].[SprOrgId] ORDER BY [t].[Id], [s0].[Id] info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[1] Executing ViewResult, running view TeamDetails. info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] Executed action WebKSP.Controllers.BudjetController.TeamDetails (WebKSP) in 225.7324ms info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] Executed endpoint 'WebKSP.Controllers.BudjetController.TeamDetails (WebKSP)' fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] An unhandled exception has occurred while executing the request. System.NullReferenceException: Object reference not set to an instance of an object. at AspNetCore.Views_Budjet_TeamDetails.ExecuteAsync() in info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [s].[Id], [s].[NAME], [s].[SprOrgId], [s].[SprStatusProgId], [s0].[Id], [s0].[NAME] FROM [SprProg] AS [s] LEFT JOIN [SprOrg] AS [s0] ON [s].[SprOrgId] = [s0].[Id] info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[1] Executing ViewResult, running view Index. info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[4] Executed ViewResult - view Index executed in 422.7429ms. info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] Executed action WebKSP.Controllers.BudjetController.Index (WebKSP) in 1025.5789ms info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] Executed endpoint 'WebKSP.Controllers.BudjetController.Index (WebKSP)' info: Microsoft.AspNetCore.Hosting.Diagnostics[2] Request finished in 1592.2702000000002ms 200 text/html; charset=utf-8 info: Microsoft.AspNetCore.Hosting.Diagnostics[1] Request starting HTTP/2.0 GET https://localhost:44311/Budjet/TeamDetails/E066DE74-F166-4F50-AF7A-BC29E11B8520 info: Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 3.0.0 initialized 'ApplicationDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[@__p_0='?' (Size = 450)], CommandType='Text', CommandTimeout='30'] SELECT TOP(1) [a].[Id], [a].[AccessFailedCount], [a].[ConcurrencyStamp], [a].[Email], [a].[EmailConfirmed], [a].[LockoutEnabled], [a].[LockoutEnd], [a].[NormalizedEmail], [a].[NormalizedUserName], [a].[PasswordHash], [a].[PhoneNumber], [a].[PhoneNumberConfirmed], [a].[SecurityStamp], [a].[TwoFactorEnabled], [a].[UserName] FROM [AspNetUsers] AS [a] WHERE ([a].[Id] = @__p_0) AND @__p_0 IS NOT NULL info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[@__user_Id_0='?' (Size = 450)], CommandType='Text', CommandTimeout='30'] SELECT [a].[Id], [a].[ClaimType], [a].[ClaimValue], [a].[UserId] FROM [AspNetUserClaims] AS [a] WHERE ([a].[UserId] = @__user_Id_0) AND @__user_Id_0 IS NOT NULL info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0] Executing endpoint 'WebKSP.Controllers.BudjetController.TeamDetails (WebKSP)' info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3] Route matched with {action = "TeamDetails", controller = "Budjet", page = "", area = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.ActionResult TeamDetails() on controller WebKSP.Controllers.BudjetController (WebKSP). info: Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 3.0.0 initialized 'ModelDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [t].[Id], [t].[NAME], [s0].[Id], [s0].[NAME], [s0].[SprOrgId], [s0].[SprStatusProgId] FROM ( SELECT TOP(1) [s].[Id], [s].[NAME] FROM [SprOrg] AS [s] WHERE CONVERT(VARCHAR(36), [s].[Id]) = N'F226979C-890F-EA11-9C1D-04D4C46926FF' ) AS [t] LEFT JOIN [SprProg] AS [s0] ON [t].[Id] = [s0].[SprOrgId] ORDER BY [t].[Id], [s0].[Id] info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[1] Executing ViewResult, running view TeamDetails. info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[4] Executed ViewResult - view TeamDetails executed in 91.23620000000001ms. info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] Executed action WebKSP.Controllers.BudjetController.TeamDetails (WebKSP) in 218.4068ms info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] Executed endpoint 'WebKSP.Controllers.BudjetController.TeamDetails (WebKSP)' info: Microsoft.AspNetCore.Hosting.Diagnostics[2] Request finished in 994.2748ms 200 text/html; charset=utf-8 Starting IIS Express ... Successfully registered URL "http://localhost:58432/" for site "WebKSP" application "/" Successfully registered URL "https://localhost:44311/" for site "WebKSP" application "/" Registration completed for site "WebKSP" IIS Express is running. info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0] User profile is available. Using 'C:\Users\defon\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: D:\Prototype\Csharp\WebKSP\WebKSP\WebKSP info: Microsoft.AspNetCore.Hosting.Diagnostics[1] Request starting HTTP/2.0 GET https://localhost:44311/ info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0] Executing endpoint 'WebKSP.Controllers.HomeController.Index (WebKSP)' info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3] Route matched with {action = "Index", controller = "Home", page = "", area = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult Index() on controller WebKSP.Controllers.HomeController (WebKSP). warn: Microsoft.EntityFrameworkCore.Model.Validation[30000] No type was specified for the decimal column 'SUMM' on entity type 'SprBudjetFinans'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'. warn: Microsoft.EntityFrameworkCore.Model.Validation[30000] No type was specified for the decimal column 'SumFinans' on entity type 'SprFinansProg'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'. warn: Microsoft.EntityFrameworkCore.Model.Validation[30000] No type was specified for the decimal column 'SumPlan' on entity type 'SprFinansProg'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'. warn: Microsoft.EntityFrameworkCore.Model.Validation[30000] No type was specified for the decimal column 'SumFinans' on entity type 'SprFinansSection'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'. warn: Microsoft.EntityFrameworkCore.Model.Validation[30000] No type was specified for the decimal column 'SumPlan' on entity type 'SprFinansSection'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'. info: Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 3.0.0 initialized 'ApplicationDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[@__userId_0='?' (Size = 450)], CommandType='Text', CommandTimeout='30'] SELECT TOP(1) [s].[Id], [s].[AspNetUsersId], [s].[SprOrgId] FROM [SprUserOrg] AS [s] WHERE (([s].[AspNetUsersId] = @__userId_0) AND ([s].[AspNetUsersId] IS NOT NULL AND @__userId_0 IS NOT NULL)) OR ([s].[AspNetUsersId] IS NULL AND @__userId_0 IS NULL) info: Microsoft.EntityFrameworkCore.Database.Command[20100] WHERE (([s].[SprOrgId] = @__orgID_0) AND @__orgID_0 IS NOT NULL) AND (CONVERT(VARCHAR(36), [s].[SprStatusProgId]) = N'602F2F57-870F-EA11-9C1D-04D4C46926FF') info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [s].[Id], [s].[NAME], [s].[SprOrgId], [s].[SprStatusProgId] FROM [SprProg] AS [s] info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[1] Executing ViewResult, running view Index. info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[4] Executed ViewResult - view Index executed in 1102.5218ms. info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] Executed action WebKSP.Controllers.HomeController.Index (WebKSP) in 14168.301500000001ms info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] Executed endpoint 'WebKSP.Controllers.HomeController.Index (WebKSP)' info: Microsoft.AspNetCore.Hosting.Diagnostics[2] Request finished in 16728.838ms 200 text/html; charset=utf-8 info: Microsoft.AspNetCore.Hosting.Diagnostics[1] Request starting HTTP/2.0 GET https://localhost:44311/Budjet info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0] Executing endpoint 'WebKSP.Controllers.BudjetController.Index (WebKSP)' info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3] Route matched with {action = "Index", controller = "Budjet", page = "", area = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.ActionResult Index() on controller WebKSP.Controllers.BudjetController (WebKSP). warn: Microsoft.EntityFrameworkCore.Model.Validation[30000] No type was specified for the decimal column 'SUM_FINANS' on entity type 'Player'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'. warn: Microsoft.EntityFrameworkCore.Model.Validation[30000] No type was specified for the decimal column 'SUM_PLAN' on entity type 'Player'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'. info: Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 3.0.0 initialized 'ModelDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [s].[Id], [s].[NAME], [s].[SprOrgId], [s].[SprStatusProgId], [s0].[Id], [s0].[NAME] FROM [SprProg] AS [s] LEFT JOIN [SprOrg] AS [s0] ON [s].[SprOrgId] = [s0].[Id] info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[1] Executing ViewResult, running view Index. info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[4] Executed ViewResult - view Index executed in 613.7032ms. info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] Executed action WebKSP.Controllers.BudjetController.Index (WebKSP) in 1543.5218ms info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] Executed endpoint 'WebKSP.Controllers.BudjetController.Index (WebKSP)' info: Microsoft.AspNetCore.Hosting.Diagnostics[2] Request finished in 1768.2417ms 200 text/html; charset=utf-8 info: Microsoft.AspNetCore.Hosting.Diagnostics[1] Request starting HTTP/2.0 GET https://localhost:44311/Budjet/TeamDetails/E066DE74-F166-4F50-AF7A-BC29E11B8520 info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0] Executing endpoint 'WebKSP.Controllers.BudjetController.TeamDetails (WebKSP)' info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3] Route matched with {action = "TeamDetails", controller = "Budjet", page = "", area = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.ActionResult TeamDetails() on controller WebKSP.Controllers.BudjetController (WebKSP). info: Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 3.0.0 initialized 'ModelDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None info: Microsoft.EntityFrameworkCore.Database.Command[20100] Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [t].[Id], [t].[NAME], [s0].[Id], [s0].[NAME], [s0].[SprOrgId], [s0].[SprStatusProgId] FROM ( SELECT TOP(1) [s].[Id], [s].[NAME] FROM [SprOrg] AS [s] WHERE CONVERT(VARCHAR(36), [s].[Id]) = N'F226979C-890F-EA11-9C1D-04D4C46926FF' ) AS [t] LEFT JOIN [SprProg] AS [s0] ON [t].[Id] = [s0].[SprOrgId] ORDER BY [t].[Id], [s0].[Id] info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[1] Executing ViewResult, running view TeamDetails. info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] Executed action WebKSP.Controllers.BudjetController.TeamDetails (WebKSP) in 788.9758ms info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] Executed endpoint 'WebKSP.Controllers.BudjetController.TeamDetails (WebKSP)' fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] An unhandled exception has occurred while executing the request. System.NullReferenceException: Object reference not set to an instance of an object. at AspNetCore.Views_Budjet_TeamDetails.ExecuteAsync() in D:\Prototype\Csharp\WebKSP\WebKSP\WebKSP\Views\Budjet\TeamDetails.cshtml:line 29 at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context) at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, Boolean invokeViewStarts) at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context) at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable`1 statusCode) at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, String contentType, Nullable`1 statusCode) at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result) at Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|29_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters() --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context) info: Microsoft.AspNetCore.Hosting.Diagnostics[2] Request finished in 2121.5708ms 500 text/html; charset=utf-8
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
||||||
27.11.2019, 09:57 | 23 | |||||
defond57, не обязательно было всю портянку выкладывать, чтобы показать один запрос:
CONVERT(VARCHAR(36), [s].[Id]) = N'F226979C-890F-EA11-9C1D-04D4C46926FF' не будет использовать кластерный индекс первичного ключа. Но JOIN здесь присутствует и он правильный.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
27.11.2019, 09:57 [ТС] | 24 |
Код
SELECT [t].[Id], [t].[NAME], [s0].[Id], [s0].[NAME], [s0].[SprOrgId], [s0].[SprStatusProgId] FROM ( SELECT TOP(1) [s].[Id], [s].[NAME] FROM [SprOrg] AS [s] WHERE ([s].[Id] = @__id_0) AND @__id_0 IS NOT NULL ) AS [t] LEFT JOIN [SprProg] AS [s0] ON [t].[Id] = [s0].[SprOrgId] ORDER BY [t].[Id], [s0].[Id]',N'@__id_0 uniqueidentifier',@__id_0='F226979C-890F-EA11-9C1D-04D4C46926FF'
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
27.11.2019, 09:58 | 25 |
Уберите эту чушь с GUID'ами. Вы мне так и не смогли объяснить, что вам мешает в использовании целых чисел в виде ключей. А значит весомой причины и нет. Зато фиговые запросы - пожалуйста. Что в коде неудобства, что в запросах ерунда.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
27.11.2019, 09:59 [ТС] | 26 |
Код
SELECT [t].[Id], [t].[NAME], [s0].[Id], [s0].[NAME], [s0].[SprOrgId], [s0].[SprStatusProgId] FROM ( SELECT TOP(1) [s].[Id], [s].[NAME] FROM [SprOrg] AS [s] WHERE CONVERT(VARCHAR(36), [s].[Id]) = N'F226979C-890F-EA11-9C1D-04D4C46926FF' ) AS [t] LEFT JOIN [SprProg] AS [s0] ON [t].[Id] = [s0].[SprOrgId] ORDER BY [t].[Id], [s0].[Id] Спасибо, буду пытаться
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
27.11.2019, 09:59 | 27 |
defond57, JOIN присутствует. Если коллекция связанных данных пуста, значит и самих связанных данных нет. Можете это проверить выполнив полученный запрос вручную через SQL Management Studio.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
||||||
27.11.2019, 10:04 [ТС] | 28 | |||||
Мне правда с гуидами комфортнее. Вот даже сейчас я бы долго разбирался Id=1 какой таблице принадлежит. А по гуидам я сразу увидел, что запрос неверный.
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
27.11.2019, 10:17 | 29 |
defond57, о боже!!! Вы реально хотите идентификаторы уникальные в контексте всей базы?! Это же нонсенс!
Колонки ссылающиеся на другую таблицу должны: а) в названии отражать на какую таблицу идёт ссылка; б) содержать ограничение FOREIGN KEY в котором прописаны таблица и название колонки, куда идёт ссылка. Это ограничение проверяется самой СУБД и нарушено быть не может; ID записи должно быть уникальным только в рамках одной таблицы. GUID'ы имеют смысл как вспомогательные ключи, для идентичности между разными системами (в случае импорта-экспорта), но не для уникальности записей разных таблиц внутри всей базы. Это совершенно бесмысленно. Вот и источник этой жести с GUID'ами) У меня на работе 600+ таблиц и везде INT в виде внешнего ключа. И я до сих пор не запутался)
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
27.11.2019, 10:33 [ТС] | 30 |
Да Бог с этими ГУИДами. Их на финальной стадии можно без проблем заменить на int.
Сейчас мне гораздо важнее понять - почему не работает запрос. ) Profiler Код
exec sp_executesql N'SELECT [t].[Id], [t].[NAME], [s0].[Id], [s0].[NAME], [s0].[SprOrgId], [s0].[SprStatusProgId] FROM ( SELECT TOP(1) [s].[Id], [s].[NAME] FROM [SprOrg] AS [s] WHERE ([s].[Id] = @__id_0) AND @__id_0 IS NOT NULL ) AS [t] LEFT JOIN [SprProg] AS [s0] ON [t].[Id] = [s0].[SprOrgId] ORDER BY [t].[Id], [s0].[Id]',N'@__id_0 uniqueidentifier',@__id_0='DB28CDF9-870F-EA11-9C1D-04D4C46926FF' Код
InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'WebKSP.Models.SprOrg', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.IEnumerable`1[WebKSP.Models.SprOrg]'. Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible(object value)
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
27.11.2019, 11:00 | 31 |
Может быть, но я какбы с гуайдами косяков тоже не видел. Да и литературке мелкомягких в best practicals ничего не сказано насчет того, что лучше применять, но примеры пишуть с гуайдами Добавлено через 2 минуты потому что в линке не надо приводить гуайды к другому типу для поиска совпадений. Если гуайд другой, и не тот что надо - проблема не в запросе, а в его параметрах. И ловится это все хорошо на дебаге ) Добавлено через 2 минуты Не, не нонсенс. Может быть такая ситуация, что поищем в этой таблице, если не найдем, то в другой точно найдем. Ситуации такие есть, и тут только гуайды
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
||||||
27.11.2019, 11:06 [ТС] | 32 | |||||
Разобрался.
Спасибо огромное за помощь. Добавлено через 3 минуты Да в том и дело - приводить начинаю от безысходности, когда вообще не понимаю, что происходит. А тут проблема оказалась в банальной невнимательности. Нафига я SprOrg вместо var всобачил до сих пор не пойму. Причем один раз написал как надо - var и там все работало. В Edit зачем то поставил SprOrg. И не мог понять, почему в одном месте все работает, а в другом ошибка сыпется. А глаз отличий не видит. Рукажоп ) Добавлено через 1 минуту Ну да - на стадии тестирования вообще штука классная. Если наговнокодил - сразу видно, что не оттуда данные тянуть начинаешь.
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
27.11.2019, 11:07 | 33 |
var тут ни при чем.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
27.11.2019, 11:11 [ТС] | 34 |
Опять же, у меня 90% таблиц ссылаются друг на друга. Через пару часов начинает рябить от цифр. Сплошные цифры... Начинаешь скучать по буквам )
Добавлено через 52 секунды Да? А в чем тогда ошибка, если после смены на var все заработало? Больше ведь ничего не менял. Добавлено через 2 минуты По ним и учусь
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
27.11.2019, 11:14 | 35 |
Не надо приводить первичные ключи, а лучше понимать что происходит.
нельзя тянуть данные "не оттуда" данные должны прийти или не прийти - все. Даже для тестирования, даже если наговнокодил. Пример того, что можно искать по одному Id в нескольких таблицах я привел не из стадии тестирования. Это когда у тебя в одной таблице должна быть ссылка на одну запись из нескольких однотипных таблиц.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
27.11.2019, 11:18 [ТС] | 36 |
До этого еще не дошел. На выходных начну учиться получать данные из нескольких таблиц.
Что-то посоветуете почитать? Ну я пока умудряюсь запрашивать не те данные и не из тех таблиц.
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
27.11.2019, 11:18 | 37 |
Вот сделай вот так вот и посмотри, совпадают типы данных который ты присваивал раньше и тот который реально ложится в var
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
27.11.2019, 11:23 | 38 |
Тут consern в чём: ТС задумал делать ключи уникальными на уровне всей базы. IDENTITY такое не позволяет, Sequence он не захотел \ не знал про это, и решил взять GUID, который псевдоуникальный. Т.е. GUID выбран не потому, что нравится, а именно из ошибоного стремления делать ID записей уникальными среди всех таблиц во всей базе. Вот это дико.
Запрос работает. Текст ошибки говорит, что вы в View передали объект класса SprOrg , когда в самой View прописано, что должна приходить коллекция.Это нонсенс. Потому, что в другой таблице - другие сущности. Если вы ищите Person, то он должен лежать в одной таблице. А заводить идентичные таблицы - нонсенс не хуже уникальных ID на всю базу. var тут никаким боком.
0
|
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
|
|
27.11.2019, 11:34 [ТС] | 39 |
Но у меня нет необходимости во всей БД делать уникальные Id. Нафига? Мне действительно тяжело работать с голыми цифрами. Я же пробовал в самом начале.
Проверю. Спасибо.
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
27.11.2019, 11:40 | 40 |
Вам не нужно знать эти цифры. От слова совсем. Что с чем связывается показывает название колонки и FOREIGN KEY CONSTRAINT.
0
|
27.11.2019, 11:40 | |
27.11.2019, 11:40 | |
Помогаю со студенческими работами здесь
40
OleDbDataReader - вылетает ошибка, что такой столбец не найден, но имя такое есть Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |