Pergunta

Como o resultado de um posto de forma, eu estou tentando salvar um novo recorde Brand. A meu ver, Sexo é uma lista suspensa, retornando um inteiro, que é preenchida a partir ViewData ( "gender")

eu tenha configurado o meu link da seguinte forma:

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

que resulta no seguinte erro.

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

Alguém poderia explicar os parâmetros em Inglês claro para mim. Eu também tentei DB.Gender como o primeiro parâmetro, mas nenhuma alegria.

Foi útil?

Solução

Ao invés de criar um EntityKey criar um objeto stub Sexo (Desculpe, eu não sou um cara VB-lo em C #):

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

Em seguida, você anexar o Sexo ao EntitySet apropriado (o nome da propriedade na DB que você obtenha entidades de gênero a partir é a seqüência abaixo):

DB.AttachTo("Genders",g);

Isso coloca o banco de dados no estado em que o sexo está no ObjectContext no estado inalterado, sem uma consulta de banco de dados. Agora você pode construir um relacionamento como por normal

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

Isso é tudo que existe para ela. Não há necessidade de mexer com EntityKeys

Espero que isso ajude

Alex

Outras dicas

O que você precisa é uma instância de ambos marca e Sexo e defina Brand.Gender à instância do Sexo. Então você pode salvar sem problemas.

heres Ok o que eu vim acima com em vez de usar updateModel. Parece ser potencialmente um risco problemático / segurança de qualquer maneira com campos potencialmente adicionais que está sendo adicionado no post. Uma nova instância do Sexo pode ser instanciado via trygetObjectByKey. Isso está funcionando até agora. Quaisquer outras sugestões sobre como obter UpdateModel para atualizar o objeto propriedade Sexo apreciado.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top