Entity Framework EntityKey / Проблема внешнего ключа

В результате публикации формы я пытаюсь сохранить новую запись бренда. На мой взгляд, 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 в качестве первого параметра, но без радости.

3 ответа

Решение

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

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

Затем вы прикрепляете пол к соответствующему EntitySet (название собственности на DB что вы получаете Gender лица из строки ниже):

DB.AttachTo("Genders",g);

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

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

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

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

Alex

Вам нужен экземпляр как бренда, так и пола, а затем установите для 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
Другие вопросы по тегам