その構成が比較的簡単で、追加のデータベース・サービスを必要としないため、ソフトウェアの開発プロセスは、選択は、通常、ローカルデータベースSQLiteのです。SQLiteは簡単にモバイルデバイス上で使用する標準的なSQL構文、オブジェクト、データ表や索引などのリレーショナル・データベースの基本的な機能のいくつか含まれ、のために良いサポートすること、およびより少ないリソースを取るだけでなく、することができます。
また、(など流暢API、移行、など)Entity Frameworkのの機能のいくつかは、その非常に便利な操作のSQLiteに私たちを可能にし、その開発チームは、プロジェクトの反復を続け、これらの地域では、我々はEFコアを使用する理由になることができます。
コース
良いプログラムを作成するために、エンティティフレームワークとWPFでSQLiteのための関連するサポートをインストールします。1.
// Entity Framework
Install-Package Microsoft.EntityFrameworkCore.Sqlite
// 提供了用于 Migration 的工具
Install-Package Microsoft.EntityFrameworkCore.Tools
データベース・アクセス・コンテキストを作成します。2.
public class User
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { set; get; }
[MaxLength(50), Required]
public string Name { set; get; }
public string Age { set; get; }
public string Sex { get; set; }
}
public class LovePlayerContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=ZDY.LovePlayer.db");
}
public DbSet<User> User { set; get; }
}
クラスファイルデータの移行を生成する3
Visual Studioを開き、管理パックコンソール、タイプ:
Add-Migration Migration_001
ときに最初に実行、プログラムが自動的に移行ディレクトリ、ファイルを生成し、移行カタログの下に、次の3つのプロジェクトを追加します。
- XXXXXXXXXXXXXX_Migration_001.cs - プライマリ移行ファイル。含まれている必要なアプリケーションの移行作業(アップ())、および(中下()で)動作に必要な移行を減らします。
- XXXXXXXXXXXXXX_Migration_001.Designer.cs - 移行メタデータファイル。EFは、使用される情報が含まれています。
- 現行モデルのLovePlayerContextModelSnapshot.cs--スナップショット。次の移行の内容を変更するときを決定するために追加。
これは、実行時間によって生成されたXXXXXXXXXXXXXXタイムスタンプ、ファイル名のタイムスタンプは、あなたが変更の進行状況を見ることができることを、年代順にファイルを維持するのに役立ちます。
データベースモデルを変更すると、新しい生成するために、再度コマンドを実行して移行を。
WPFのプロジェクト4.コール
App.xaml.cs
public App()
{
using (var db = new LovePlayerContext())
{
try
{
using (var context = new LovePlayerContext())
{
// 检查是否有新的迁移
if (context.Database.GetPendingMigrations().Any())
{
context.Database.Migrate(); //执行迁移
}
}
}
catch (NotSupportedException ex)
{
}
catch (Exception ex)
{
}
}
}
呼び出すことによってcontext.Database.Migrate()メソッドを、データはデータベースファイルが存在しない場合、それが自動的に作成され、データベース構造、に同期。
注Doがない()の移行は、前に呼び出さ()EnsureCreated。EnsureCreated()移行はにつながる可能スキーマ、作成バイパスする移行()が失敗しました。
EnsureCreated()および移行()の違い:EnsureCreatedは()データベースが存在しないときに自動的に作成されますが、存在する場合、変更後のデータベースとデータ構造の変更がデータベースに更新されません。
5.試験結果
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
using (var context = new LovePlayerContext())
{
if (context.User.ToList().Count == 0)
{
var cate1 = new User { Name = "User A" };
var cate2 = new User { Name = "User B" };
context.User.AddRange(cate1, cate2);
context.SaveChanges();
}
// 查询
var list = context.User.ToList();
this.DataList.ItemsSource = list;
}
}
}
MainWindow.xaml
<Grid>
<DataGrid x:Name="DataList" AutoGenerateColumns="True"></DataGrid>
</Grid>