Kode Pertama ke Database yang Sudah Ada
Panduan langkah demi langkah ini menyediakan pengenalan pengembangan Code First yang menargetkan database yang sudah ada. Code First memungkinkan Anda menentukan model menggunakan kelas C# atau VB.Net. Konfigurasi tambahan opsional dapat dilakukan menggunakan atribut pada kelas dan properti Anda atau dengan menggunakan API yang fasih.
Prasyarat
Anda harus menginstal Visual Studio 2012 atau Visual Studio 2013 untuk menyelesaikan panduan ini.
Anda juga akan memerlukan Alat Kerangka Kerja Entitas versi 6.1 (atau yang lebih baru) untuk Visual Studio yang diinstal. Lihat Mendapatkan Kerangka Kerja Entitas untuk informasi tentang menginstal versi terbaru Alat Kerangka Kerja Entitas.
1. Buat Database yang Sudah Ada
Biasanya ketika Anda menargetkan database yang sudah ada, database tersebut sudah akan dibuat, tetapi untuk panduan ini kita perlu membuat database untuk diakses.
Mari kita lanjutkan dan hasilkan database.
Membuka Visual Studio
Tampilan -> Penjelajah Server
Klik kanan pada Data Koneksi ions -> Tambahkan Koneksi ion...
Jika Anda belum tersambung ke database dari Server Explorer sebelum Anda harus memilih Microsoft SQL Server sebagai sumber data
Koneksi ke instans LocalDB Anda, dan masukkan Blogging sebagai nama database
Pilih OK dan Anda akan ditanya apakah Anda ingin membuat database baru, pilih Ya
Database baru sekarang akan muncul di Server Explorer, klik kanan padanya dan pilih Kueri Baru
Salin SQL berikut ke dalam kueri baru, lalu klik kanan pada kueri dan pilih Jalankan
CREATE TABLE [dbo].[Blogs] (
[BlogId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (200) NULL,
[Url] NVARCHAR (200) NULL,
CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);
CREATE TABLE [dbo].[Posts] (
[PostId] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (200) NULL,
[Content] NTEXT NULL,
[BlogId] INT NOT NULL,
CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);
INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('The Visual Studio Blog', 'http://blogs.msdn.com/visualstudio/')
INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('.NET Framework Blog', 'http://blogs.msdn.com/dotnet/')
2. Buat Aplikasi
Untuk menjaga hal-hal sederhana, kita akan membangun aplikasi konsol dasar yang menggunakan Kode Pertama untuk melakukan akses data:
- Membuka Visual Studio
- File -> Baru -> Proyek
- Pilih Windows dari menu sebelah kiri dan Aplikasi Konsol
- Masukkan CodeFirstExistingDatabaseSample sebagai nama
- Pilih OK
3. Model Reverse Engineer
Kami akan menggunakan Alat Kerangka Kerja Entitas untuk Visual Studio untuk membantu kami menghasilkan beberapa kode awal untuk dipetakan ke database. Alat-alat ini hanya menghasilkan kode yang juga dapat Anda ketik dengan tangan jika Anda mau.
Project -> Tambahkan Item Baru...
Pilih Data dari menu sebelah kiri lalu ADO.NET Model Data Entitas
Masukkan BloggingContext sebagai nama dan klik OK
Ini meluncurkan Wizard Model Data Entitas
Pilih Kode Pertama dari Database dan klik Berikutnya
Pilih koneksi ke database yang Anda buat di bagian pertama dan klik Berikutnya
Klik kotak centang di samping Tabel untuk mengimpor semua tabel dan klik Selesai
Setelah proses insinyur terbalik menyelesaikan sejumlah item akan ditambahkan ke proyek, mari kita lihat apa yang telah ditambahkan.
File konfigurasi
File App.config telah ditambahkan ke proyek, file ini berisi string koneksi ke database yang ada.
<connectionStrings>
<add
name="BloggingContext"
connectionString="data source=(localdb)\mssqllocaldb;initial catalog=Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
</connectionStrings>
Anda akan melihat beberapa pengaturan lain dalam file konfigurasi juga, ini adalah pengaturan EF default yang memberi tahu Kode Terlebih Dahulu tempat membuat database. Karena kami memetakan ke database yang ada, pengaturan ini akan diabaikan dalam aplikasi kami.
Konteks Turunan
Kelas BloggingContext telah ditambahkan ke proyek. Konteks mewakili sesi dengan database, memungkinkan kami untuk mengkueri dan menyimpan data. Konteks mengekspos DbSet<TEntity> untuk setiap jenis dalam model kami. Anda juga akan melihat bahwa konstruktor default memanggil konstruktor dasar menggunakan sintaksis name= . Ini memberi tahu Code First bahwa string koneksi yang akan digunakan untuk konteks ini harus dimuat dari file konfigurasi.
public partial class BloggingContext : DbContext
{
public BloggingContext()
: base("name=BloggingContext")
{
}
public virtual DbSet<Blog> Blogs { get; set; }
public virtual DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
Anda harus selalu menggunakan sintaksis name= saat menggunakan string koneksi dalam file konfigurasi. Ini memastikan bahwa jika string koneksi tidak ada maka Kerangka Kerja Entitas akan melempar daripada membuat database baru berdasarkan konvensi.
Kelas model
Akhirnya, kelas Blog dan Post juga telah ditambahkan ke proyek. Ini adalah kelas domain yang membentuk model kami. Anda akan melihat Anotasi Data yang diterapkan ke kelas untuk menentukan konfigurasi di mana konvensi Kode Pertama tidak akan selaras dengan struktur database yang ada. Misalnya, Anda akan melihat anotasi StringLength di Blog.Name dan Blog.Url karena memiliki panjang maksimum 200 dalam database (default Code First adalah menggunakan panjang maksimum yang didukung oleh penyedia database - nvarchar(max) di SQL Server).
public partial class Blog
{
public Blog()
{
Posts = new HashSet<Post>();
}
public int BlogId { get; set; }
[StringLength(200)]
public string Name { get; set; }
[StringLength(200)]
public string Url { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
4. Membaca & Menulis Data
Sekarang setelah kita memiliki model, saatnya untuk menggunakannya untuk mengakses beberapa data. Terapkan metode Utama di Program.cs seperti yang ditunjukkan di bawah ini. Kode ini membuat instans baru dari konteks kami dan kemudian menggunakannya untuk menyisipkan Blog baru. Kemudian menggunakan kueri LINQ untuk mengambil semua Blog dari database yang diurutkan menurut abjad menurut Judul.
class Program
{
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
// Create and save a new Blog
Console.Write("Enter a name for a new Blog: ");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
Anda sekarang dapat menjalankan aplikasi dan mengujinya.
Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
.NET Framework Blog
ADO.NET Blog
The Visual Studio Blog
Press any key to exit...
Bagaimana jika Perubahan Database Saya?
Wizard Kode Pertama ke Database dirancang untuk menghasilkan kumpulan titik awal kelas yang kemudian dapat Anda ubah dan ubah. Jika skema database Anda berubah, Anda dapat mengedit kelas secara manual atau melakukan insinyur terbalik lain untuk menimpa kelas.
Menggunakan Migrasi Pertama Kode ke Database yang Sudah Ada
Jika Anda ingin menggunakan Migrasi Pertama Kode dengan database yang sudah ada, lihat Migrasi Pertama Kode ke database yang sudah ada.
Ringkasan
Dalam panduan ini kita melihat pengembangan Code First menggunakan database yang sudah ada. Kami menggunakan Alat Kerangka Kerja Entitas untuk Visual Studio untuk merekayasa balik sekumpulan kelas yang dipetakan ke database dan dapat digunakan untuk menyimpan dan mengambil data.