gpt4 book ai didi

c# - DataBinding DataGridView 到 EF.DbSet,如何将新的 DataGridView 行发送到 DbSet?

转载 作者:行者123 更新时间:2023-11-30 17:03:00 25 4
gpt4 key购买 nike

我想通过实体模型(使用模型优先方法创建)将我的 DataGridView 控件数据绑定(bind)到数据库,我正在使用 EF 5.0、.NET 4.5 和 winforms

我的绑定(bind)组织如下:

DataGridView->BindingSource->BindingList->EF.DbSet->数据库

结果(问题)是

1) 对现有记录的更新工作正常

2) insert 被发送到 BindingList,但它们ARE NOT 被发送到 EF.DbSet

这可能是什么原因,我该如何解决?

我的代码:

    //form level objects
private BindingList<Person> persons;
private BindingSource pSource=new BindingSource();

private void Form1_Load(object sender, EventArgs e)
{
_context=new TestEFmodelContainer();
var p = _context.PersonSet.ToList();
persons = new BindingList<Person>(p); //getting bindinglist
persons.AllowEdit = true;
persons.AllowNew = true;

pSource.DataSource = persons;
pSource.AllowNew = true;

personDataGridView.DataSource = pSource;
}

//"Save changes to DB" button
private void SaveChangesToDB_Click(object sender, EventArgs e)
{
_context.SaveChanges();
}

最佳答案

我终于设法解决了这个问题!

代替这些行:

    persons = new BindingList<Person>(p); //getting bindinglist
...
pSource.DataSource = persons;

我用这条线:

    pSource.DataSource = _context.Persons.Local.ToBindingList();

Persons 是来 self 的 DbContext 的 DbSet<>

我无法弄清楚的另一件事是尝试使用派生的 EF 模型类进行这项工作 - 假设我有一个 BasePerson 类和 DerivedPerson 类。 EF 仅为 BasePerson 创建 DbSet(包括所有派生实例,可通过 OfType 方法访问)我无法为这些派生类工作 .Local.ToBindingList。

派生类的技巧是在 DbContext 类中为那些派生类添加 DbSet!

关于c# - DataBinding DataGridView 到 EF.DbSet,如何将新的 DataGridView 行发送到 DbSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19093897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com