如何使用实体框架从数据库生成可用的dbcontext?

时间:2012-07-16 17:30:55

标签: c# entity dbcontext

我创建了简单的数据库,每个表有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)。

请帮忙, 干杯;)

1 个答案:

答案 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#不是我的朋友。上面的代码应该很容易转换。

上面用于生成模型和上下文的步骤看起来很好。