Tu problema es esta línea:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Esto funcionará en la primera inserción, ya que LAST_INSERT_ID
es el valor de clave externa apropiado.
Pero en el segundo insertar, LAST_INSERT_ID
ahora ha cambiado al valor de ID del registro que acaba de insertar (la primera inserción).
Para solucionar esto, debe obtener LAST_INSERT_ID
en una variable de C#
, y luego páselo a cada instrucción SQL subsiguiente (es decir, @ForeignKeyID en lugar de LAST_INSERT_ID
).
Esto significará cambiar su primero :
cmd.ExecuteNonQuery();
a:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
donde insertedID es una variable (probablemente int
) que declaras en la parte superior de tu método.
A continuación, deberá cambiar:
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();
}
}
a:
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();
}
}