有 1 个带有 bindingNavigator 控件的 winForm,2 个绑定到 bindingsource 控件的网格:1 个网格用于类别(主)和 1 个网格用于产品(详细),数据和关系加载良好。
现在,我尝试将新的(主)记录添加到类别:
对于接下来的两种情况,我遇到了问题:
第一种情况:当我单击“+”按钮而不输入任何内容时,未添加“新类别”并且我收到消息:“无法将值 NULL 插入到列‘CategoryName’,表‘Northwind.dbo.Categories’;列没有允许空值。INSERT 失败。\r\n语句已终止。" 尽管用代码填充它。
第二种情况:当我单击“+”按钮并在 CategoryName 单元格中手动输入内容时,单击保存按钮后它会被保留,但我收到消息:“对数据库的更改已得到验证,但更新时发生错误对象上下文。ObjectContext 可能处于不一致状态。内部异常消息:AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。请确保键值是唯一的,然后再调用 AcceptChanges”。
这是我的代码:
NorthwindEntities ctx;
bool _adding;
private void Form2_Load(object sender, EventArgs e)
{
ctx = new NorthwindEntities();
categoriesBindingSource.DataSource = ctx.Categories;
}
private void categoriesBindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
_adding = true;
}
private void categoriesBindingSource_CurrentChanged(object sender, EventArgs e)
{
if (_adding)
{
categoriesBindingSource.EndEdit();
var newCat = (Categories)categoriesBindingSource.Current;
if (newCat.Products == null)
{
Products Prd = new Products();
Prd.Discontinued = false;
Prd.ProductName = "New Product Name";
ctx.AddToProducts(Prd);
}
newCat.CategoryName = " New Category";
ctx.AddToCategories(newCat);
_adding = false;
}
}
private void categoriesBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
categoriesBindingSource.EndEdit();
ctx.SaveChanges();
}
请帮忙...