Pregunta

Como resultado de una publicación de formulario, estoy tratando de guardar un nuevo registro de Marca. En mi opinión, el género es un menú desplegable, que devuelve un número entero, que se completa desde ViewData (" gender ")

He configurado mi enlace de la siguiente manera:

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

Lo que da como resultado el siguiente error.

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

¿Podría alguien explicarme los parámetros en inglés simple? También probé DB.Gender como primer parámetro, pero no me alegro.

¿Fue útil?

Solución

En lugar de crear una EntityKey, cree un objeto de género de código auxiliar (lo siento, no soy un tipo VB, así que en C #):

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

Luego adjunta el género al EntitySet apropiado (el nombre de la propiedad en DB del que obtiene las entidades de género es la cadena a continuación):

DB.AttachTo("Genders",g);

Esto coloca la base de datos en el estado donde está el género en el ObjectContext en el estado sin cambios sin una consulta de base de datos. Ahora puedes construir una relación como de costumbre

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

Eso es todo lo que hay que hacer. No es necesario jugar con EntityKeys

Espero que esto ayude

Alex

Otros consejos

Lo que necesita es una instancia de Brand y Gender y luego configure Brand.Gender en la instancia de Gender. Entonces puede guardar sin problemas.

Ok, he aquí lo que se me ocurrió en lugar de usar updateModel. Parece ser problemático / potencialmente un riesgo de seguridad de todos modos con campos potencialmente adicionales que se agregan en la publicación. Una nueva instancia de género se puede instanciar a través de trygetObjectByKey. Esto está funcionando hasta ahora. Se agradece cualquier otra sugerencia sobre cómo hacer que UpdateModel actualice el objeto de propiedad de género.

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top