使用子集时EF6上下文丢失

时间:2018-02-13 13:16:15

标签: c# .net entity-framework data-binding datagridview

您好我有一个表'供应商'和另一个'SupplierPlants'我有两个表通过代码绑定到DataGridViews:

{% include "plot.html" %}

AppData类包含我的所有数据库实体:

        bsSuppliers = new BindingSource();
        bsSuppliers.DataSource = AppData.Suppliers;
        bsSuppliers.AllowNew = true;
        dgvSuppliers.DataSource = bsSuppliers;
        dgvSuppliers.Refresh();

        bsSuppliersPlants = new BindingSource();
        bsSuppliersPlants.DataSource = AppData.SupplierPlants;
        bsSuppliersPlants.AllowNew = true;
        dgvSupplierPlants.DataSource = bsSuppliersPlants;
        dgvSupplierPlants.Refresh();

现在我将RowEnter事件绑定到Supplier DataGridView,以便它只显示所选供应商的工厂:

        Db = new PureTrialEntities();

        Db.Suppliers.Load();
        Suppliers = Db.Suppliers.Local;

        Db.SupplierPlants.Load();
        SupplierPlants = Db.SupplierPlants.Local;

问题是,当我调用 AppData.Db.SaveChanges(); 时,它会正确地将所有更改应用于供应商表,但它不会为SupplierPlants表添加新行,因为我已经采用了一个子集本地数据库。 我是否必须手动管理为此表添加的新行,因为我使用的是子集而不是整个本地数据库?

2 个答案:

答案 0 :(得分:1)

你应该手动插入它们,

Db.SupplierPlants.Add(item);

详细information

希望有所帮助,

答案 1 :(得分:0)

就像一个FYI我绑定了DGV CellEndEdit,只是将新添加的行添加到上下文中,如下所示:

 private void dgvSupplierPlants_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        var data = ((SupplierPlant)((DataGridView)sender).Rows[e.RowIndex].DataBoundItem); //Get the Data for the edited Row.
        if (AppData.Db.Entry(data).State == EntityState.Detached)
        {
            AppData.SupplierPlants.Add(data);
        }

    }