C# と Visual Studio を使用して Entity Framework で MSSQL DB からデータを取得し、MySQL.Data nuget パッケージと C# と Visual Studio を使用して MySQL DB にインポートしています。キーをフォアすることなくデータがあれば、すべて問題なくインポートが完了します。コードは次のとおりです。
var context = new SupermarketsChainEntities();
var measures = context.Measures;
var supermarkets = context.Supermarkets;
var vendors = context.Vendors;
var expenses = context.Expenses;
var products = context.Products;
String myConn = "server=localhost;Database=supermarkets_chain;uid=root;pwd=;";
MySqlConnection conn = new MySqlConnection(myConn);
conn.Open();
//Insert measures
foreach (var measure in measures)
{
String insertQuery = "insert into measures (id, name) values (null, @name)";
MySqlCommand cmd = new MySqlCommand(insertQuery, conn);
cmd.Parameters.AddWithValue("@name", measure.Name);
cmd.ExecuteNonQuery();
}
しかし、一対多の関係と外部キーを使用してテーブルにデータをインポートしようとすると:
foreach (var product in products)
{
String insertQuery = "insert into products (id, name, price, measure_id, vendor_id) values (null, @name, @price, @measure_id, @vendor_id)";
MySqlCommand cmd = new MySqlCommand(insertQuery, conn);
cmd.Parameters.AddWithValue("@name", product.Name);
cmd.Parameters.AddWithValue("@price", product.Price);
cmd.Parameters.AddWithValue("@measure_id", product.Measure);
cmd.Parameters.AddWithValue("@vendor_id", product.Vendor);
cmd.ExecuteNonQuery();
}
何か問題が発生し、次の例外が発生します。
Unhandled Exception: MySql.Data.MySqlClient.MySqlException: Cannot add or update
a child row: a foreign key constraint fails (`supermarkets_chain`.`products`, C
ONSTRAINT `fk_products_measures` FOREIGN KEY (`measure_id`) REFERENCES `measures
` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& i
nsertedId)
at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affected
Rows, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior
)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
at SqlToMysql.Program.Main(String[] args) in d:\SoftUni\DatabaseApps\Teamwork
\SqlToMysql\SqlToMysql\Program.cs:line 67
誰かが問題を処理してデータを適切にインポートするのを手伝ってくれますか? ここに DB スキーマを添付します。