1

2 つのテーブルとそれぞれにいくつかの列を持つ単純なデータベースを作成しました。エンティティ フレームワーク 4.1+ をインストールするときに読んだいくつかのチュートリアルでは、「DbContext コード」を生成できます。次に、ローカル コンテキストを使用して ObservableCollection を取得できます。これは、UI を自動的に更新するため、DbSet よりも優れています。そこで、エンティティ フレームワーク 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には2つのレコードがありますが、db.Students.Localが空であることに気付きました(以前にエディタで2つのレコードを手動で追加しました)。だから私はこれを見つけました:ObservableCollectionはObjectSetよりも優れています(2番目の回答)が、そのような「Load」メソッドはありません。私は何が欠けていますか?この「ロード」を機能させるには、特別なコードを追加する必要がありますか?

1. 新しいプロジェクトを作成し、単純なデータベースを追加します。2. Entity Framework を使用していくつかのコードを自動的に生成し、データが変更されると自動的に更新される DataGrid などにテーブルをバインドできるようにします (ObservableCollection が必要です)。3.これを取得したら、データを挿入/更新/削除する機能をいくつか追加します(autoupdate ofcを使用)。

助けてください、乾杯;)

4

1 に答える 1

1

データベースに対してクエリを実行するまで、ローカルには何もありません。これを実現する1つの方法は、Loadを呼び出すことです。これにより、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#は私の友達ではありません。上記のコードは簡単に変換できるはずです。

モデルとコンテキストを生成するために上記で行った手順は問題ないように見えます。

于 2012-09-03T20:56:21.030 に答える