LoginSignup
7
5

More than 5 years have passed since last update.

XamarinでEntity Framework Coreを使ってAzureのSQL Databaseをいじる

Posted at

概要

タイトル通り。

※ほぼ、概要 - 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
)

image.png

プロジェクトの準備

Visual StudioでXamarin(今回はXamarin.Forms)の空のプロジェクトを作成します。

NuGetで以下を入れる。

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer

DBと同じようにクラスをつくる

以下のようにDBの構成に沿ったクラスをつくる。

フィールドの変数とかがDBと違うと正しく処理できないので、注意。

DBModel.cs
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認証))を入力}");
        }
    }
}
User.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace DBTest2
{
    class User
    {
        public int id { get; set; }
        public string mail { get; set; }
    }
}

データを追加して、データを取得してみる

とりあえずコンソールの出力を使って見てみます。

MainPage.xaml.cs
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認証))を入力}");をちゃんと書く
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5