0

我是使用 SQL Server 使用实体框架的新手,在将记录插入数据库时​​遇到问题。问题在于 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);

然后继续创建driverLogdriverStatus对象。

于 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到 Db,但没有设置键。

4)如果您打算链接newDriverStatus到,driver那么添加driverStatus也会出现冲突。

而且,就像其他人已经指出的那样,您忘记添加driver到数据库中。

总之,将列定义为 INDENTITY 并让 fx 处理外键要容易得多。只需使用newDriverStatus.Driver = driver;driverLog.Driver = driver;

于 2012-10-29T14:28:55.473 回答