Ger Hayden Ответов: 1

Как лучше всего обновить составной ключ в entity framework


Многие из моих классов имеют составные ключи, обычно ID и DateValidFrom.

DateValidFrom может измениться во время обновления.

Когда я делал свои собственные обновления перед принятием Entity Framework, я отслеживал исходную комбинацию ID/Date и обновлял строку с ними в предложении where.

Что я уже пробовал:

Это очень простая задача, чтобы сделать то же самое снова в EF, но это попахивает тем, как я обновлял старые школьные индексированные записи, начиная с середины восьмидесятых годов.

Конечно, есть более современный способ с Entity Framework. Как это лучше всего сделать, особенно с использованием шаблона репозитория?

Gerry Schmitz

Просить о решении, которое было бы более современным, чем простое, трудно, особенно когда не знаешь, что такое "простая задача". "Обновление" может включать удаление и вставку; просто на поверхности (возможно, только). И пока вы играете исключительно в контексте данных без сохранения, не имеет значения, что вы делаете.

1 Ответов

Рейтинг:
12

Gerry Schmitz

На самом деле нет никакой причины менять дату; у вас просто есть "новая" "дата вступления в силу" и новая запись; ваши запросы просто должны найти правильную запись для данного промежутка времени.

Дата истечения срока действия одной записи-это дата вступления в силу следующей записи (для этого идентификатора).


Ger Hayden

Спасибо за помощь, Джерри. Если завтра придет клиент и будет настаивать на том, чтобы взять мою систему, то именно это я и сделаю, чтобы запустить ее в производство. Однако это есть и, вероятно, всегда будет для меня не более чем тренировочной песочницей. Таким образом, "бизнес-кейс" - это что-то вроде того, что у меня есть новый продукт, который должен поступить в продажу 01/10/2020, но он откладывается до 01/01/2021. В этом сценарии пользователь хочет изменить fromdate в таблице цен, чтобы отразить это, а не заканчивать текущую запись, чтобы отразить, что продукт начнет продажу на новую дату.

Я могу сделать это, отслеживая исходный ключ, но мне любопытно, существует ли специфический подход Entity Framework к изменению составного ключа.

Другая вещь, которую следует учитывать, заключается в том, что, хотя у меня не так много внешних ключей от MySql, они у меня есть сейчас как часть миграции, которую я недавно сделал на Sql Server (добавление entity framework является частью этого - и это первая таблица). Мне тоже нужно будет подумать об этом. Возможно, разрешение ключевых обновлений больше не является хорошей идеей. Но независимо от того, что это упрямая вещь, я все равно хотел бы посмотреть, как эф может это сделать.

Gerry Schmitz

Я "использовал" композитные ключи "давным-давно"; что-то, что я мог бы перенять от Джеймса Мартина ... Э. Ф. Кодда ... или IMS DB или что-то еще; производительность, я думаю. Во всяком случае, в наши дни я нахожу, что они не дают никакого преимущества, когда я серьезно думаю о своем дизайне. У меня есть "идентификатор сущности" (обычно int), и все дочерние элементы ссылаются только на свой родительский идентификатор, а все остальные столбцы-это значения из "таблиц поиска".

Ger Hayden

У меня была небольшая вспышка здравого смысла. С этого момента составные ключи будут доступны для редактирования только до их первоначальной фиксации. После этого они должны быть окончательно датированы и заменены новой строкой.

Gerry Schmitz

Хороший план. При эффективном отсутствии "удалений" (пользователем) ваша система становится более надежной. Я думаю, что составные ключи-это скорее пред-SQL. Однако они очень желательны в "хранилище данных" (для извлечения информации). Оперативная и информационная эффективность.