Обновите значение первичного ключа с помощью платформы объекта

Другое решение flexbox

Вы можете использовать инверсию порядка элементов в HTML. Затем, используя order, как в ответе Michael_B , вы можете использовать flex-direction: row-reverse; или flex-direction: column-reverse; в зависимости от вашего макета.

Рабочий пример:

.flex {
  display: flex;
  flex-direction: row-reverse;
   /* Align content at the "reversed" end i.e. beginning */
  justify-content: flex-end;
}

/* On hover target its "previous" elements */
.flex-item:hover ~ .flex-item {
  background-color: lime;
}

/* styles just for demo */
.flex-item {
  background-color: orange;
  color: white;
  padding: 20px;
  font-size: 3rem;
  border-radius: 50%;
}
5
4
3
2
1

50
задан Paul Lemke 2 September 2009 в 02:41
поделиться

4 ответа

Вы не можете и не зря. См. Комментарии KM.

Я говорю, что вы могли бы создать две таблицы: одна с анонимными данными, а другая - с реальными данными пользователя после входа в систему.

Или вы могли бы (не проверял и не делал когда-либо мной ) имеет такую ​​структуру таблицы:

---Customers----
AutoNumber PK <- This links to all other tables in your database, and does NOT change.
CustomerID  <- This can change.
CustomerType <- Anonymous or logged in.  

И когда они входят в систему, вы меняете CustomerType и CustomerID на то, что вам нужно.

Итак, ваш запрос может выглядеть так:

Dim customer As Customer = (From c In db.Customer _
                            Where c.CustomerID = {Some temp ID} _
                            AndAlso c. CustomerType = "Anonymous").FirstOrDefault
// After user logs in.
customer.CustomerID = {Make a new user ID here}
customer.CustomerType = "LoggedIn" {or what ever}
db.SaveChanges()

Обратите внимание, что первичный ключ автонумерации никогда не меняется. Это сделано для того, чтобы любые таблицы, которые у вас есть во взаимосвязи с таблицей Customers, по-прежнему работают, и им не нужно выполнять каскадные обновления первичного ключа (что похоже на нанесение себе удара карандашом в глаз).

11
ответ дан 7 November 2019 в 10:56
поделиться

Если бы мог бы быть только один экземпляр контекста базы данных когда-либо затем, изменение pk не было бы такой проблемой. Но каждый экземпляр контекста поддерживает свой собственный кэш и может кэшировать запись, которую Вы хотите изменить.

взаимодействия EF с базой данных используют pk (от кэша контекста) для идентификации записи (записей), которую они запрашивают. Если объект контекста мог бы обновить ключ в персистентности, информация, на которую другие объекты контекста полагаются к идентификационным данным, что запись сразу и постоянно неправильно.

Короче говоря, при обновлении первичного ключа, Вы делали недействительным кэш в потенциально всех других экземплярах контекста, и это повредило бы EF существенно. Это - одна из больших причин, почему это - плохая идея обновить pk.

0
ответ дан 7 November 2019 в 10:56
поделиться

Вы не можете обновить первичный ключ через структуру сущностей, так как структура сущности не будет знать, какую строку базы данных обновлять.

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

21
ответ дан 7 November 2019 в 10:56
поделиться

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

Так что просто не делайте этого, есть другие способы выполнить то, что вы пытаетесь сделать.

-3
ответ дан 7 November 2019 в 10:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: