純コア3:WPFでの使用Entity Frameworkの中核営業SQLiteデータベース - ZDY「LOVE |写真、旅行、アウトドア、旅行ノート、レイダース、感情、プログラミングについて...

オリジナル: ネットコア3:WPFでの使用Entity Frameworkの中核営業SQLiteデータベース- ZDY「LOVE |写真、旅行、アウトドア、旅行ノート、レイダース、感情、プログラミングについて...

その構成が比較的簡単で、追加のデータベース・サービスを必要としないため、ソフトウェアの開発プロセスは、選択は、通常、ローカルデータベースSQLiteのです。SQLiteは簡単にモバイルデバイス上で使用する標準的なSQL構文、オブジェクト、データ表や索引などのリレーショナル・データベースの基本的な機能のいくつか含まれ、のために良いサポートすること、およびより少ないリソースを取るだけでなく、することができます。

また、(など流暢API、移行、など)Entity Frameworkのの機能のいくつかは、その非常に便利な操作のSQLiteに私たちを可能にし、その開発チームは、プロジェクトの反復を続け、これらの地域では、我々はEFコアを使用する理由になることができます。

// Entity Framework
Install-Package Microsoft.EntityFrameworkCore.Sqlite
// 提供了用于 Migration 的工具
Install-Package Microsoft.EntityFrameworkCore.Tools
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; }
}

Visual Studioを開き、管理パックコンソール、タイプ:

Add-Migration Migration_001

ときに最初に実行、プログラムが自動的に移行ディレクトリ、ファイルを生成し、移行カタログの下に、次の3つのプロジェクトを追加します。

  • XXXXXXXXXXXXXX_Migration_001.cs - プライマリ移行ファイル。含まれている必要なアプリケーションの移行作業(アップ())、および(中下()で)動作に必要な移行を減らします。
  • XXXXXXXXXXXXXX_Migration_001.Designer.cs - 移行メタデータファイル。EFは、使用される情報が含まれています。
  • 現行モデルのLovePlayerContextModelSnapshot.cs--スナップショット。次の移行の内容を変更するときを決定するために追加。

これは、実行時間によって生成されたXXXXXXXXXXXXXXタイムスタンプ、ファイル名のタイムスタンプは、あなたが変更の進行状況を見ることができることを、年代順にファイルを維持するのに役立ちます。

データベースモデルを変更すると、新しい生成するために、再度コマンドを実行して移行を

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がない()の移行は、前に呼び出さ()EnsureCreatedEnsureCreated()移行はにつながる可能スキーマ、作成バイパスする移行()が失敗しました。

EnsureCreated()および移行()の違い:EnsureCreatedは()データベースが存在しないときに自動的に作成されますが、存在する場合、変更後のデータベースとデータ構造の変更がデータベースに更新されません。

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>

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12293259.html