Seu problema é esta linha:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Isso funcionará na primeira inserção, pois
LAST_INSERT_ID
é o valor de chave estrangeira apropriado. Mas no segundo inserir,
LAST_INSERT_ID
agora mudou para o valor de ID do registro que você acabou de inserir (a primeira inserção). Para corrigir isso, você precisa obter
LAST_INSERT_ID
em uma variável C#
e, em seguida, passe-o para cada instrução SQL subsequente (ou seja, @ForeignKeyID em vez de LAST_INSERT_ID
). Isso significa alterar seu primeiro :
cmd.ExecuteNonQuery();
para:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
onde inseridoIDéuma variável (provavelmente
int
) que você declara na parte superior do seu método. Em seguida, você precisará alterar:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
{
using (MySqlDataAdapter sda = new MySqlDataAdapter())
{
cmd.Parameters.AddWithValue("@MultipleImageName", file.FileName);
cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
para:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, @InsertedID); "))
{
using (MySqlDataAdapter sda = new MySqlDataAdapter())
{
cmd.Parameters.AddWithValue("@MultipleImageName", file.FileName);
cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
cmd.Parameters.AddWithValue("@InsertedID", InsertedID);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}