0

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 スキーマを添付します。

4

0 に答える 0