0

SQL Server で Entity Framework を使用するのは初めてで、データベースにレコードを挿入するのに問題があります。問題は、主キーと外部キーにリンクされている 3 つのテーブルにあり、過去に外部キーを持つデータベースを使用したことがありません。

今のところ、いくつかのテストデータをデータベースに取得しようとしていますが、エラーが発生し続けます:

INSERT ステートメントが FOREIGN KEY と競合しています

データベースへの挿入を開始するのを手伝ってくれる人はいますか? 私が使用しているコードは次のとおりです。

private void button3_Click(object sender, EventArgs e)
{
    TaxiDBEntities db = new TaxiDBEntities(); //connection to database
    DriverStatus newDriverStatus = new DriverStatus(); // driver status object

    /*populate the new driver object*/
    //newDriverStatus.DriverID = Convert.ToInt32(driverComboBox.Text);
    //newDriverStatus.Status = statusTextBox.Text;
    //newDriverStatus.Area = areaTextBox.Text;

    Driver driver = new Driver();

    int driverIDInt = Convert.ToInt32(driverComboBox.Text);

    //driver = db.Drivers.SingleOrDefault(p => p.DriverId == driverIDInt);
    //if (driver == null)
    //{
        driver.DriverId = driverIDInt;
        driver.Fname = "test";
        driver.Lname = "test";
    //}

    db.DriverStatus.AddObject(newDriverStatus); // add driver object to entity model

    DriverLog driverLog = new DriverLog();

    driverLog.driverLogID = driverIDInt;
    driverLog.DriverID = driverIDInt;
    driverLog.date = DateTime.Now;

    db.DriverLog.AddObject(driverLog);

    DriverStatus driverStatus = new DriverStatus();

    driverStatus.DriverID = driverIDInt;
    driverStatus.Status = "1";
    driverStatus.Area = "1";

    db.DriverStatus.AddObject(driverStatus);

    try
    {
        db.SaveChanges();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}
4

3 に答える 3

2

データベースへのオブジェクトの実際の挿入driverが欠落しているようです。ラインの後

driver.notes = "test";

あなたは次のようなものを持っている必要があります

db.Driver.AddObject(driver);

そして、オブジェクトの作成にdriverLog進みdriverStatusます。

于 2012-10-29T14:25:17.113 に答える
1

ステータスまたはログを追加する前に、ドライバーをデータベースに挿入する必要があります。ドライバーオブジェクトを入力した後に最初に行うことは、ステータスを追加することです

于 2012-10-29T14:26:13.607 に答える
1

1) テキストボックスから ID を取得していますint driverIDInt = Convert.ToInt32(driverComboBox.Text)。これは最善の解決策ではありません。IDENTITY 列にすることを検討してください。

2) モデルは Drive-DriverLog が 1-n であることを示していますが、コードは 1 つ以上のログを許可しません:

driverLog.driverLogID = driverIDInt;
driverLog.DriverID = driverIDInt;

3) データベースに追加newDriverStatusしていますが、キーが設定されていません。

4) リンクしようとしている場合はnewDriverStatusdriver追加driverStatusしても競合が発生します。

driverそして、他の人がすでに指摘したように、データベースに追加するのを忘れています。

要約すると、列を INDENTITY として定義し、fx に外部キーを処理させる方がはるかに簡単です。使用するだけnewDriverStatus.Driver = driver;driverLog.Driver = driver;

于 2012-10-29T14:28:55.473 に答える