|
74 / 6 / 0
Регистрация: 24.01.2020
Сообщений: 159
|
|
Сломался метод Create, как починить?23.06.2020, 09:16. Показов 5545. Ответов 13
Метки нет (Все метки)
Уважаемые знатоки, к вам очень интересный вопрос: как могло сломаться то, что целую неделю не трогали?
Создала метод Create, работал хорошо, новые записи создавались в бд правильно, приступила к другому, но вдруг спустя неделю решаю проверить и метод просто не работает. Временная переменная не изменяется как это было. Ошибка : The property 'IdApartment' on entity type 'Apartments' has a temporary value. Either set a permanent value explicitly or ensure that the database is configured to generate values for this property. Полное описание: Microsoft.EntityFrameworkCore.Update.Int ernal.CommandBatchPreparer.Validate(Modi ficationCommand modificationCommand) Microsoft.EntityFrameworkCore.Update.Int ernal.CommandBatchPreparer.BatchCommands (IReadOnlyList<IUpdateEntry> entries)+MoveNext() Microsoft.EntityFrameworkCore.Update.Int ernal.BatchExecutor.Execute(DbContext _, ValueTuple<IEnumerable<ModificationComma ndBatch>, IRelationalConnection> parameters) Microsoft.EntityFrameworkCore.Storage.In ternal.NoopExecutionStrategy.Execute<TSt ate, TResult>(TState state, Func<DbContext, TState, TResult> operation, Func<DbContext, TState, ExecutionResult<TResult>> verifySucceeded) Microsoft.EntityFrameworkCore.Update.Int ernal.BatchExecutor.Execute(IEnumerable< ModificationCommandBatch> commandBatches, IRelationalConnection connection) Microsoft.EntityFrameworkCore.Storage.Re lationalDatabase.SaveChanges(IReadOnlyLi st<IUpdateEntry> entries) Microsoft.EntityFrameworkCore.ChangeTrac king.Internal.StateManager.SaveChanges(I ReadOnlyList<InternalEntityEntry> entriesToSave) Microsoft.EntityFrameworkCore.ChangeTrac king.Internal.StateManager.SaveChanges(b ool acceptAllChangesOnSuccess) Microsoft.EntityFrameworkCore.DbContext. SaveChanges(bool acceptAllChangesOnSuccess) Microsoft.EntityFrameworkCore.DbContext. SaveChanges() WebMena.Controllers.ContractsController. Create(IndexViewModel indexView) in ContractsController.cs + _context.SaveChanges(); Microsoft.AspNetCore.Mvc.Internal.Action MethodExecutor+TaskOfIActionResultExecut or.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments) System.Threading.Tasks.ValueTask<TResult >.get_Result() Microsoft.AspNetCore.Mvc.Internal.Contro llerActionInvoker.InvokeActionMethodAsyn c() Microsoft.AspNetCore.Mvc.Internal.Contro llerActionInvoker.InvokeNextActionFilter Async() Microsoft.AspNetCore.Mvc.Internal.Contro llerActionInvoker.Rethrow(ActionExecuted Context context) Microsoft.AspNetCore.Mvc.Internal.Contro llerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted) Microsoft.AspNetCore.Mvc.Internal.Contro llerActionInvoker.InvokeInnerFilterAsync () Microsoft.AspNetCore.Mvc.Internal.Resour ceInvoker.InvokeNextResourceFilter() Microsoft.AspNetCore.Mvc.Internal.Resour ceInvoker.Rethrow(ResourceExecutedContex t context) Microsoft.AspNetCore.Mvc.Internal.Resour ceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted) Microsoft.AspNetCore.Mvc.Internal.Resour ceInvoker.InvokeFilterPipelineAsync() Microsoft.AspNetCore.Mvc.Internal.Resour ceInvoker.InvokeAsync() Microsoft.AspNetCore.Builder.RouterMiddl eware.Invoke(HttpContext httpContext) Microsoft.AspNetCore.StaticFiles.StaticF ileMiddleware.Invoke(HttpContext context) Microsoft.AspNetCore.Diagnostics.Develop erExceptionPageMiddleware.Invoke(HttpCon text context)
0
|
|
| 23.06.2020, 09:16 | |
|
Ответы с готовыми решениями:
13
Сломался ноутбук MSI GX 640 как починить без СЦ
Как починить? |
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 26.06.2020, 23:21 | |
|
"Ошибка" однозначно говорит, что дело в IdApartment.
Откуда у вас этот это йдишник берется в модели и соответствует ли он id соответствующей таблицы (вью) БД - неизвестно. Лучший способ проверить - написать "сбойный" запрос в MS SQL Memegement Studio и попробовать его выполнить. На первый взгляд, Вы пытаетесь добавить этот йдишник явно, но для инкремента это не допустимо. Почему раньше он (айдишник) не указывался при добавлении, а сейчас указывается - надо смотреть весь код контроллера, который в сабже просто отсутствует. Скорее всего имеет место "ошибка с задержкой" в Вашем коде. Кстати, вопрос: этот айди у Вас представлен на страничке добавления, а если представлен, то может ли юзер что-то туда ввести ? Добавлено через 7 минут Чего-то пришло в голову: не пытаетесь ли Вы вручную определить значение id перед вставкой, а потом совать его в запрос (модель) ? Ну что типа Select max(id)+1 from table ? Если, не дай Бог, это так, то Вам надо в 1й класс по основам БД ![]() Добавлено через 3 минуты Добавлено через 38 секунд Как узнать ID только что добавленной записи: Добавлено через 1 минуту Почему-то ссылки вырезаются. Тогда вот текст из ссылки: В MS SQL, например: select scope_identity(), чтобы получить последний созданный id в текущем соединении и только текущей области видимости (триггеры и функции игнорируются). select @@identity, чтобы получить последний созданный id на текущем соединении независимо от области видимости (триггеры и функции учитываются). select ident_curent(‘tablename’), чтобы получить последний id на конкретной таблице, созданные на любом соединении.
0
|
|
|
74 / 6 / 0
Регистрация: 24.01.2020
Сообщений: 159
|
||||||||
| 29.06.2020, 04:10 [ТС] | ||||||||
0
|
||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 30.06.2020, 02:21 | ||
|
Ясно одно, что Ваши потуги "вычислить" значение нового id - это закат солнца вручную. Короче, 1-й класс, вторая четверть.
0
|
||
|
74 / 6 / 0
Регистрация: 24.01.2020
Сообщений: 159
|
|||||||||||
| 30.06.2020, 04:29 [ТС] | |||||||||||
|
переменные IdContract, IdApartment и IdHistoryStatus
три разные таблицы, главная Contracts с уникальным идом, с таблицей Apartments связана внешним ключом, как и с ContractStatusHistory.
Благодарствую за ответы и потраченное время.
0
|
|||||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||||||
| 02.07.2020, 01:24 | |||||||
Добавлено через 10 минут И что это еще за "чудище обло, озорно, стозевно и лайяй" (с) ? Имеется в виду модель IndexViewModel. Это типа контейнера, куда Вы пытаетесь засунуть все, что можно, включая старые тапочки, дедушкин футляр от очков и вообще все, что лежит на чердаке и подвале ? Почитайте что-нибудь про базы данных. Ну ведь полно материала. На том же метаните, профессорвебе и т.д. ЗЫ. Зачем у вас Async ? Это осмысленно или потому что "дядя" сказал/написал/показал ?
1
|
|||||||
|
74 / 6 / 0
Регистрация: 24.01.2020
Сообщений: 159
|
|||||
| 02.07.2020, 07:52 [ТС] | |||||
Добавлено через 1 минуту
0
|
|||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 03.07.2020, 02:11 | |
|
Не знаю, кто и где Вас учил..
Вот этапы для создания нормального приложения. I. Подготовительный этап 1. Грамотная и исчерпывающая (насколько возможно) постановка задачи. Включает Предметную область, исходные данные, выходные формы (для веб - макет странички) 2. Создание Модели данных "на бумаге". Описание сущностей, их свойств, ограничений, связей друг с другом. Проецирование сущностей в плоские таблицы, написание алгоритмов серверной бизнес логики. Опять же "на бумаге". 3. Разработка алгоритмов обработки данных: представление, отображение, модификация. Снова "на бумаге". II. Этап машинного проектирования 1. Перенос Модели данных + бизнес-логика в проект. Тут варианты: - либо прямо пишете классы и логику на C#, а потом рефлексия на SQL Server готовой модели (Code First/Model First) - либо работаете на SQL-сервере, создавая и отлаживая таблицы, хранимки, UDF и пр. непосредственно на SQL-сервере (Database First) Тут могу дать такой совет: если Вы разрабатываете БД "под проект" и слабо знакомы с SQL, то выбирайте Code-First, правда придется позаботиться о начальной заливке отладочных данных. Если с SQL на "ты" и база уже есть и в ней реальные данные, то DataBase First однозначно. Результатом этапа является Модель, состоящая из классов-сущностей (рефлексия таблиц, вьюшек и т.д.), а также класс Репозиторий, включающий методы работы с классами-сущностями (извлечение, сортировка, пагинация, фильтрация, модификация и пр). Почитать: ORM вообще и Entity Framework в частности 2. Создание контроллера (контроллеров) - Определение метода для аутентификации юзверя (если нужно) - связь с моделью "Юзверь" - Определение метода для стартовой страницы с или без использования профиля авторизированного юзверя - Определение методов для правки данных помодельно - Определение других методов - "Выделить" методы, которые могут вызываться асинхронно (хотя бы комментами для начала) 3. Создание представлений. - Главная страница (класс, по которому должна типизироваться) , включая частичные представления - Частичные страницы (классы для типизации) 4. Создание файлов .css и .js для внесения туда кода стилей и клиентского кода JavaScript 5. Настройка главного представления (линки на Ваши css,js + библиотеки JQuery + Ajax), добавление классов в элементы разметки, назначение обработчиков событий в соответствии с ТЗ (см. п. I.1) 6. Собственно отладка. Все эти этапы есть в книжках и на популярных сайтах-учебниках (рекомендую metanit.com - там все по полочкам) К сожалению, хорошего учебного видеоцикла лично я не нашел. Но что-то можно почерпнуть и там - гугл Вам в помощь Если Вам не в лом все это сделать, то выложите результат файлом. Думаю, найдутся желающие посмотреть (например, я
1
|
|
|
74 / 6 / 0
Регистрация: 24.01.2020
Сообщений: 159
|
|||
| 03.07.2020, 04:27 [ТС] | |||
|
Спасибо вам за столь большой ответ, он очень полезен! ![]() Добавлено через 1 минуту
0
|
|||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 03.07.2020, 13:24 | ||
Сообщение было отмечено Talinka как решение
Решение Соединяетесь с SQL-сервером, выбираете базу, а потом чекаете только те объекты, которые собираетесь использовать в проекте. Получаете в Model только те классы, с которыми работаете, а также контекст с базовой имплементацией этих классов. Если методов и классов в контексте недостаточно (например, Вам надо получить дополнительный функционал и даже дополнительные классы - типа датасета, которого нет в базе как такового (выборка из нескольких таблиц)), то добавляете в папку Model (но не в папку .edmx !) свой новый класс, а также класс репозитория. И там пишете все, что нужно. Если придется делать ремаппинг базы, то эти классы не "пострадают" ![]() 2. Логика в контроллере - бомба замедленного действия. Суть контроллера - это взаимодействие приложения с клиентом. Код манипулирования данными должен быть вынесен из него в Модель (имеется в виду не только модель edmx, но и вся папка Model). Вам хорошо бы простенький пример ![]() Добавлено через 15 минут Вот простейший случай Есть бд с двумя таблицами: Group и Students, связанные отношением "один-ко-многим". Т.е. каждый студент "прописан" в одной группе (через forein key). Задача: отобразить на странице все студентов, а также номера групп. В бд такой таблицы нет и быть не должно. Решения два: 1. На стороне SQL Server. Пишете UDF, возвращающую нужный нд со всеми колонками, которые требуется отобразить. Перемаппируете EF добавляя галочку на этой UDF. В результате получаете в модели .edmx новый класс и новый метод в контексте, к которым и привязываетесь в контроллере и строго типизированном представлении. 2. На стороне ORM. Пишете ручками новый класс, в репозиторий добавляете метод, где с помощью linq пишете нужный запрос с join, возвращающий новый класс. (И класс модели, и репозиторий создаете в папке Model, но не .edmx !) Далее все как и в первом случае. Какой выбрать - не скажу. Ибо это вопрос холиварный и все зависит от многих факторов. Например, если в проекте участвует команда, в которой есть люди, отвечающие за ORM, то решается вторым способом. Если разраб один и проект без планового расширения на другие задачи, то лучше метод 1. Лично я предпочитаю первый способ, т.к. нет проблем с SQL
1
|
||
|
74 / 6 / 0
Регистрация: 24.01.2020
Сообщений: 159
|
||||||
| 06.07.2020, 06:34 [ТС] | ||||||
|
Боже, ваши ответы такие развернутые, большое спасибо, что откликнулись, буду пытаться исправлять тот кошмар, который нагородила!
А у меня возник еще один вопрос, вы случаем не подскажите как сделать двойное подключение? Просто в одной базе существуют про Id улицы, а в другой полная расшифровка
"DefaultConnection": "Server=*** ;Port=*** Database=test1;User Id=***Password=******;" "SecondConnection": "Server=***; Port=*** Database=test2;User Id=***Password=******;" а что происходит в Startup непонятно
0
|
||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 06.07.2020, 20:07 | ||
|
Если по сути вопроса. В приложении можно создать произвольное число соединений с произвольным числом баз на произвольном числе SQL-серверов произвольных типов. Важно одно: с каждой базой - отдельный объект connection со своей connectionstring. Взаимодействие с данными в этих соединениях (бд) - Ваша головная боль. Но вот Вам добрый совет: если можно избежать нескольких connection, - избегайте ! Почему Вы проигнорировали тему ORM ? А если все-таки включили ее в проект (в виде EF или каком-другом) , как ее используете ? В Вашем коде это почти не просматривается Добавлено через 3 часа 30 минут Если данные в разных БД, причем одна из них - "родная", т.е. рабочая, на которые у Вас все права. Все остальные - "побочные", из которых Вы берете лишь данные, но не меняете их. Случай достаточно распространенный. Например, если нужная связь с 1С. Схема работы: 1. Создаете ORM (желательно с использованием проверенных инструментов, например EntityFramework), в которой будут Ваши модели + репозиторий. В общем случае получаете: -- Созданные автоматически (EF) классы и контекст в папке .edmx. Туда ручками шаловливыми не лезем ! -- В папке Models создаем ручками классы для дополнительных сущностей. -- В папке Models создаем ручками класс для репозитория. Вообще-то нужен интерфейс, но для новичков сойдет и класс - так проще и понятнее. В этом классе пишем всю имплементацию, которой нет в контексте .edmx. Методы этого репозитория и будете вызывать из контроллера или еще откуда (из других методов репозитория например) 2. В контроллере строите методы, в которых идет обращение к репозиторию для извлечения/модификации моделей. В том числе методы, вызываемые Rasor при построении встроенных разметок. Это к тому, что Вам не нужен "шкаф" для передачи всех данных в одно представление. Вместо этого у Вас будет несколько компактных сумочек, которые надо раздать разным частям одной страницы (представления). Подкачку этих частей лучше выполнить Ajax-ом (это отдельная тема, но там нет ничего сверхсложного, уверяю Вас) 3. Натягиваете стили и пишете js-логику для "оживления" страницы. Стили и js в отдельные файлы (чаще всего в папку Content проекта) Добавлено через 13 минут Чуть не забыл ![]() Что делать если баз несколько. Если побочные базы только для извлечения некоторых данных, то просто указываете их (базы) явно в SQL-запросах (или LINQ как Вам удобнее). Соединение у Вас должно быть одно ! Настоятельно рекомендую такие запросы заворачивать в UDF/SP "рабочей" БД - тогда при маппинге EF просто подключите эти программы и получите готовые модели и методы. Если редактировать надо в разных базах. Тут все не так просто. Я бы создал по соединению на каждую БД, при этом количество .edmx у меня было бы равно кол-ву соединений. Изменение данных в этих базах завернул бы в SP, которые написал бы для них. Из репозитория (репозиторий может быть общим - это обычная практика) их бы вызывал, передавая нужные параметры, в соответствующих методах. При этом код работал бы к контексте соответствующего коннекшена. Но, повторюсь, если можно избежать "побочных" баз, это следует сделать в первую очередь ! При работе с несколькими соединениями обязательно следите за транзакциями !
1
|
||
|
74 / 6 / 0
Регистрация: 24.01.2020
Сообщений: 159
|
|
| 07.07.2020, 04:18 [ТС] | |
|
слов не хватит,чтобы в полной мере вас отблагодарить! СПАСИБО ОГРОМНОЕ!
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 07.07.2020, 11:06 | ||
![]() Добавлено через 4 минуты Почта: msguns@ukr.net Скайп: Сергей Щербаков, Чернигов
1
|
||
| 07.07.2020, 11:06 | |
|
Помогаю со студенческими работами здесь
14
Как починить wi-fi на ноутбуке НР? Как починить тему? Как починить код Как починить усилитель? Как починить код? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|