概要
タイトル通り。
※ほぼ、概要 - EF Core | Microsoft Docsと同じです。
Entity Frameworkってなに
Ruby on RailsにおけるActiveRecord の .NETバージョン。O/Rマッパー。
EntityFrameworkについて - Qiita
EF Core はオブジェクト リレーショナル マッパー (O/RM) として機能します。これにより、.NET 開発者は .NET オブジェクトを使用してデータベースを操作できます。通常は開発者が記述する必要があるほとんどのデータ アクセス コードが不要になります。
概要 - EF Core | Microsoft Docs
アプリ上でSQLを生書きするなんて、気持ち悪いですよね。ナマガキはあたりますよ。
そんなときにすっきり書ける。
事前準備
SQL Databaseの準備
Azure上でSQL Databaseを準備しましよう。
今回のサンプルで使うテーブルは以下の通り。
CREATE TABLE Users (
id int PRIMARY KEY NOT NULL,
mail text NOT NULL
)
プロジェクトの準備
Visual StudioでXamarin(今回はXamarin.Forms)の空のプロジェクトを作成します。
NuGetで以下を入れる。
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.SqlServer
DBと同じようにクラスをつくる
以下のようにDBの構成に沿ったクラスをつくる。
フィールドの変数とかがDBと違うと正しく処理できないので、注意。
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Text;
namespace DBTest2
{
class DBModel : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"{Azure Portalの該当SQLデータベースの接続文字列(ADO.NET(SQL認証))を入力}");
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DBTest2
{
class User
{
public int id { get; set; }
public string mail { get; set; }
}
}
データを追加して、データを取得してみる
とりあえずコンソールの出力を使って見てみます。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace DBTest2
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
using (var db = new DBModel())
{
db.Users.Add(new User { mail = "hoge@hoge.com", id = 1 });
var count = db.SaveChanges();
Debug.WriteLine("{0} records saved to database", count);
foreach (var user in db.Users)
{
Debug.WriteLine("{0}", user.mail);
}
}
}
}
}
まとめ
以下を気を付ければできる。
- 必要なパッケージをちゃんといれる
- クラスのフィールドの変数をDBと同じ名前を使う
-
optionsBuilder.UseSqlServer(@"{Azure Portalの該当SQLデータベースの接続文字列(ADO.NET(SQL認証))を入力}");
をちゃんと書く