Вопрос

В результате публикации формы я пытаюсь сохранить новую запись бренда. На мой взгляд, Gender - это выпадающий список, возвращающий Integer, который заполняется из ViewData (" пол ")

Я настроил свою ссылку следующим образом:

gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()

Это приводит к следующей ошибке.

Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.

Может ли кто-нибудь объяснить мне параметры на простом английском языке? Я также попробовал DB.Gender в качестве первого параметра, но без радости.

Это было полезно?

Решение

Вместо создания EntityKey создайте заглушку объект Gender (извините, я не VB парень, так в C #):

Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};

Затем вы присоединяете пол к соответствующему EntitySet (имя свойства в БД , из которого вы получаете сущности Gender, приведено в следующей строке):

DB.AttachTo("Genders",g);

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

brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();

Это все, что нужно сделать. Нет необходимости возиться с EntityKeys

Надеюсь, это поможет

Алекс

Другие советы

Вам нужен экземпляр как бренда, так и пола, а затем установите для Brand.Gender экземпляр пола. Тогда вы можете сохранить без проблем.

Хорошо, вот что я придумал вместо использования updateModel. Это кажется проблематичным / потенциально угрозой безопасности в любом случае с потенциально дополнительными полями, добавляемыми в посте. Новый экземпляр Gender может быть создан с помощью trygetObjectByKey. Это работает до сих пор. Любые другие предложения по получению UpdateModel для обновления объекта свойства Gender приветствуются.

Dim cID As Integer
cID = CInt(Request.Form("Gender"))
Dim key As New EntityKey(DB.DefaultContainerName() & ".Gender", "ID", cID)

Dim objGenderDS As New Gender
'Bring back the Gender object.
If DB.TryGetObjectByKey(key, objGenderDS) Then
Brand.GenderReference.EntityKey = key
Brand.Gender = objGenderDS
DB.AddToBrand(Brand)
DB.SaveChanges()
Else
End If
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top