我创建了简单的数据库,每个表有2个表,列数很少。在我阅读安装实体框架4.1+的一些教程中,我可以生成“DbContext代码”,然后我可以使用Local上下文来获取ObservableCollection,这比DbSet更好,因为它会自动更新UI。所以我安装了实体框架4.1,选择了我的数据库模型并选择了“ADO.NET DbContext Generator”。所以我明白了:
namespace BazaStudentow
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class DatabaseEntities : DbContext
{
public DatabaseEntities()
: base("name=DatabaseEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<Notes> Notes { get; set; }
public DbSet<Students> Students { get; set; }
}
}
加上带有简单表格模型的StudModel.tt文件。
所以在大班我添加了这个:
DatabaseEntities db = new DatabaseEntities();
但后来我意识到db.Students.Local是空的(我之前在编辑器中手动添加了2条记录),尽管db.Students有2条记录。所以我发现了这个:ObservableCollection better than ObjectSet(第二个答案),但是没有这样的方法“加载”。我错过了什么?我应该添加一些特殊代码来使“加载”工作吗?
我只是想简单地想: 1.制作新项目并添加简单数据库。 2.使用Entity Framework自动生成一些代码,这样我就可以将表绑定到DataGrid或其他东西,当数据发生变化时会自动更新(所以我需要ObservableCollection)。 3.当我有这个时,添加一些函数来插入/更新/删除数据(使用autoupdate ofc)。
请帮忙, 干杯;)
答案 0 :(得分:1)
在对数据库执行查询之前,Local中没有任何内容。实现此目的的一种方法是调用Load,这样做,并返回一个ObservableCollection(Of Student)(在您的情况下)。
Dim bs = New BindingSource
Dim s = db.Students
s.Load()
'At this point, Local will contain all students.
'Cast to a BindingList, which stays in sync with the ObservableCollection.
bs.DataSource = s.Local.ToBindingList
或者我猜你可以走这条路:
Dim bs = New BindingSource
db.Students.Load
bs.DataSource = db.Students.Local.ToBindingList
抱歉,C#不是我的朋友。上面的代码应该很容易转换。
上面用于生成模型和上下文的步骤看起来很好。