Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Seri tutorial ini menunjukkan kepada Anda cara menyebarkan (menerbitkan) aplikasi web ASP.NET ke Azure App Service Web Apps atau ke penyedia hosting pihak ketiga, dengan menggunakan Visual Studio 2012 atau Visual Studio 2010. Untuk informasi tentang seri ini, lihat tutorial pertama dalam seri ini.
Ikhtisar
Tutorial ini menunjukkan cara menyiapkan proyek untuk penyebaran database. Struktur database dan beberapa (tidak semua) data dalam dua database aplikasi harus disebarkan ke lingkungan pengujian, staging, dan produksi.
Biasanya, saat Anda mengembangkan aplikasi, Anda memasukkan data pengujian ke dalam database yang tidak ingin Anda sebarkan ke situs langsung. Namun, Anda mungkin juga memiliki beberapa data produksi yang ingin Anda sebarkan. Dalam tutorial ini Anda akan mengonfigurasi proyek Contoso University dan menyiapkan skrip SQL sehingga data yang benar disertakan saat Anda menyebarkan.
Pengingat: Jika Anda mendapatkan pesan kesalahan atau sesuatu tidak berfungsi saat Anda melalui tutorial, pastikan untuk memeriksa halaman pemecahan masalah.
SQL Server Express LocalDB (versi ringan dari SQL Server untuk pengembangan dan pengujian)
Aplikasi sampel menggunakan SQL Server Express LocalDB. SQL Server Express adalah edisi gratis SQL Server. Ini umumnya digunakan selama pengembangan karena didasarkan pada mesin database yang sama dengan versi lengkap SQL Server. Anda dapat menguji dengan SQL Server Express dan yakin bahwa aplikasi akan bertingkah sama dalam produksi, dengan beberapa pengecualian untuk fitur yang bervariasi antara Edisi SQL Server.
LocalDB adalah mode eksekusi khusus SQL Server Express yang memungkinkan Anda bekerja dengan database sebagai file .mdf . Biasanya, file database LocalDB disimpan di folder App_Data proyek web. Fitur instans pengguna di SQL Server Express juga memungkinkan Anda untuk bekerja dengan file .mdf , tetapi fitur instans pengguna tidak digunakan lagi; oleh karena itu, LocalDB direkomendasikan untuk bekerja dengan file .mdf .
Biasanya SQL Server Express tidak digunakan untuk aplikasi web produksi. LocalDB khususnya tidak disarankan untuk penggunaan produksi dengan aplikasi web karena tidak dirancang untuk bekerja dengan IIS.
Di Visual Studio 2012, LocalDB diinstal secara default dengan Visual Studio. Di Visual Studio 2010 dan versi yang lebih lama, SQL Server Express (tanpa LocalDB) diinstal secara default dengan Visual Studio; itulah sebabnya Anda menginstalnya sebagai salah satu prasyarat dalam tutorial pertama dalam seri ini.
Untuk informasi selengkapnya tentang edisi SQL Server, termasuk LocalDB, lihat sumber daya berikut: Berfungsi dengan Database SQL Server.
Kerangka Kerja Entitas dan Penyedia Universal
Untuk akses database, aplikasi Contoso University memerlukan perangkat lunak berikut yang harus disebarkan dengan aplikasi karena tidak disertakan dalam .NET Framework:
- ASP.NET Universal Providers (memungkinkan sistem keanggotaan ASP.NET menggunakan Azure SQL Database)
- Kerangka Kerja Entitas
Karena perangkat lunak ini termasuk dalam paket NuGet, proyek sudah disiapkan sehingga assembly yang diperlukan dideploy bersama proyek tersebut. (Tautan menunjuk ke versi saat ini dari paket ini, yang mungkin lebih baru dari apa yang diinstal dalam proyek pemula yang Anda unduh untuk tutorial ini.)
Jika Anda menyebarkan ke penyedia hosting pihak ketiga alih-alih Azure, pastikan Anda menggunakan Entity Framework 5.0 atau yang lebih baru. Versi Code First Migrations yang lebih lama memerlukan Full Trust, dan sebagian besar penyedia hosting akan menjalankan aplikasi Anda di Medium Trust. Untuk informasi selengkapnya tentang Medium Trust, lihat tutorial Menyebarkan ke IIS sebagai Lingkungan Pengujian .
Konfigurasi Migrasi Code First untuk penyebaran aplikasi basis data
Database aplikasi Contoso University dikelola oleh Code First, dan Anda akan menyebarkannya dengan menggunakan Code First Migrations. Untuk gambaran umum penyebaran database dengan menggunakan Migrasi Pertama Kode, lihat tutorial pertama dalam seri ini.
Saat Anda menyebarkan database aplikasi, biasanya Anda tidak hanya menyebarkan database pengembangan Anda dengan semua data di dalamnya ke produksi, karena banyak data di dalamnya mungkin hanya ada untuk tujuan pengujian. Misalnya, nama siswa dalam database pengujian bersifat fiktif. Di sisi lain, Anda sering tidak dapat menyebarkan hanya struktur database tanpa data di dalamnya sama sekali. Beberapa data dalam database pengujian Anda mungkin data nyata dan harus ada ketika pengguna mulai menggunakan aplikasi. Misalnya, database Anda mungkin memiliki tabel yang berisi nilai nilai yang valid atau nama departemen nyata.
Untuk mensimulasikan skenario umum ini, Anda akan mengonfigurasi metode Code First Migrations Seed yang menyisipkan ke dalam database hanya data yang ingin Anda gunakan dalam produksi. Metode ini Seed tidak boleh menyisipkan data pengujian karena akan berjalan dalam produksi setelah Kode Pertama membuat database dalam produksi.
Dalam versi Code First yang lebih awal sebelum fitur Migrasi dirilis, adalah hal yang umum bagi metode Seed untuk menyisipkan data pengujian juga, karena setiap kali terjadi perubahan model selama pengembangan, database harus dihapus sepenuhnya dan dibuat ulang dari awal. Dengan Migrasi Code First, data pengujian disimpan setelah perubahan database, jadi memasukkan data pengujian dalam metode Seed tidak diperlukan. Proyek yang Anda unduh menggunakan metode menyertakan semua data dalam Seed metode kelas inisialisasi. Dalam tutorial ini, Anda akan menonaktifkan kelas penginisialisasi tersebut dan mengaktifkan Migrasi. Kemudian, Anda akan memperbarui metode Seed di kelas konfigurasi Migrasi sehingga hanya data yang ingin Anda sisipkan dalam produksi yang akan dimasukkan.
Diagram berikut mengilustrasikan skema database aplikasi:
Untuk tutorial ini, Anda akan berasumsi bahwa tabel Student dan Enrollment harus kosong ketika situs pertama kali disebarkan. Tabel lain berisi data yang harus dimuat sebelumnya ketika aplikasi ditayangkan.
Nonaktifkan penginisialisasi
Karena Anda akan menggunakan Code First Migrations, Anda tidak perlu menggunakan Code First initializer DropCreateDatabaseIfModelChanges. Kode untuk penginisialisasi ini ada dalam file SchoolInitializer.cs dalam proyek ContosoUniversity.DAL. Pengaturan dalam appSettings elemen file Web.config menyebabkan penginisialisasi ini berjalan setiap kali aplikasi mencoba mengakses database untuk pertama kalinya:
<appSettings>
<add key="Environment" value="Dev" />
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL" value="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity.DAL" />
</appSettings>
Buka file Web.config aplikasi dan hapus atau komentari add elemen yang menentukan kelas Penginisialisasi Kode Pertama. Elemen appSettings sekarang terlihat seperti ini:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
Nota
Cara lain untuk menentukan kelas inisialisasi adalah dengan memanggil Database.SetInitializer dalam Application_Start metode dalam file Global.asax . Jika Anda mengaktifkan Migrasi dalam proyek yang menggunakan metode tersebut untuk menentukan penginisialisasi, hapus baris kode tersebut.
Nota
Jika Anda menggunakan Visual Studio 2013, tambahkan langkah-langkah berikut antara langkah 2 dan 3: (a) Di PMC masukkan "update-package entityframework -version 6.1.1" untuk mendapatkan versi EF saat ini. Kemudian (b) buat proyek untuk mendapatkan daftar kesalahan build, dan perbaiki. Hapus perintah 'using' untuk namespace yang sudah tidak ada lagi, klik kanan kemudian pilih Selesaikan untuk menambahkan perintah 'using' di mana diperlukan, dan ubah setiap kemunculan dari System.Data.EntityState ke System.Data.Entity.EntityState.
Aktifkan Migrasi Pertama Kode
Pastikan bahwa proyek ContosoUniversity (bukan ContosoUniversity.DAL) ditetapkan sebagai proyek startup. Di Penjelajah Solusi, klik kanan proyek ContosoUniversity dan pilih Atur sebagai Proyek Startup. "Code First Migrations akan mencari di proyek pemula untuk menemukan string koneksi database."
Dari menu Alat , pilih NuGet Package Manager>Package Manager Console.
Di bagian atas jendela Package Manager Console pilih ContosoUniversity.DAL sebagai proyek default lalu pada
PM>prompt masukkan "enable-migrations".
(Jika Anda mendapatkan kesalahan yang mengatakan perintah enable-migrations tidak dikenali, masukkan perintah update-package EntityFramework -Reinstall dan coba lagi.)
Perintah ini membuat folder Migrasi di proyek ContosoUniversity.DAL, dan dimasukkan ke dalam folder tersebut dua file: file Configuration.cs yang dapat Anda gunakan untuk mengonfigurasi Migrasi, dan file InitialCreate.cs untuk migrasi pertama yang membuat database.
Anda memilih proyek DAL di daftar drop-down Proyek defaultkonsol Manajer Paket karena
enable-migrationsperintah harus dijalankan dalam proyek yang berisi kelas konteks Code First. Saat kelas tersebut berada dalam proyek pustaka kelas, Code First Migrations mencari string koneksi database dalam proyek startup bagi solusi tersebut. Dalam solusi ContosoUniversity, proyek web telah ditetapkan sebagai proyek startup. Jika Anda tidak ingin menunjuk proyek yang memiliki string koneksi sebagai proyek startup di Visual Studio, Anda dapat menentukan proyek startup di perintah PowerShell. Untuk melihat sintaks perintah, masukkan perintahget-help enable-migrations.Perintah
enable-migrationssecara otomatis membuat migrasi pertama karena database sudah ada. Sebagai alternatif, Anda dapat membiarkan fitur Migrations untuk membuat database. Untuk melakukannya, gunakan Server Explorer atau SQL Server Object Explorer untuk menghapus database ContosoUniversity sebelum Anda mengaktifkan Migrasi. Setelah Anda mengaktifkan migrasi, buat migrasi pertama secara manual dengan memasukkan perintah "add-migration InitialCreate". Anda kemudian dapat membuat database dengan memasukkan perintah "update-database".
Siapkan metode Seed
Untuk tutorial ini, Anda akan menambahkan data tetap dengan menambahkan kode ke Seed metode kelas Code First Migrations Configuration . Code First Migration memanggil metode Seed setelah setiap migrasi.
Seed Karena metode berjalan setelah setiap migrasi, ada data yang sudah ada dalam tabel setelah migrasi pertama. Untuk menangani situasi ini, Anda akan menggunakan AddOrUpdate metode untuk memperbarui baris yang telah disisipkan, atau menyisipkannya jika belum ada. Metode AddOrUpdate ini mungkin bukan pilihan terbaik untuk skenario Anda. Untuk informasi selengkapnya, lihat Berhati-hatilah dengan Metode AddOrUpdate EF 4.3 di blog Julie Lerman.
Buka file Configuration.cs dan ganti komentar dalam
Seedmetode dengan kode berikut:var instructors = new List<Instructor> { new Instructor { FirstMidName = "Kim", LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), OfficeAssignment = new OfficeAssignment { Location = "Smith 17" } }, new Instructor { FirstMidName = "Fadi", LastName = "Fakhouri", HireDate = DateTime.Parse("2002-07-06"), OfficeAssignment = new OfficeAssignment { Location = "Gowan 27" } }, new Instructor { FirstMidName = "Roger", LastName = "Harui", HireDate = DateTime.Parse("1998-07-01"), OfficeAssignment = new OfficeAssignment { Location = "Thompson 304" } }, new Instructor { FirstMidName = "Candace", LastName = "Kapoor", HireDate = DateTime.Parse("2001-01-15") }, new Instructor { FirstMidName = "Roger", LastName = "Zheng", HireDate = DateTime.Parse("2004-02-12") } }; instructors.ForEach(s => context.Instructors.AddOrUpdate(i => i.LastName, s)); context.SaveChanges(); var departments = new List<Department> { new Department { Name = "English", Budget = 350000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 1 }, new Department { Name = "Mathematics", Budget = 100000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 2 }, new Department { Name = "Engineering", Budget = 350000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 3 }, new Department { Name = "Economics", Budget = 100000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 4 } }; departments.ForEach(s => context.Departments.AddOrUpdate(d => d.Name, s)); context.SaveChanges(); var courses = new List<Course> { new Course { CourseID = 1050, Title = "Chemistry", Credits = 3, DepartmentID = 3 }, new Course { CourseID = 4022, Title = "Microeconomics", Credits = 3, DepartmentID = 4 }, new Course { CourseID = 4041, Title = "Macroeconomics", Credits = 3, DepartmentID = 4 }, new Course { CourseID = 1045, Title = "Calculus", Credits = 4, DepartmentID = 2 }, new Course { CourseID = 3141, Title = "Trigonometry", Credits = 4, DepartmentID = 2 }, new Course { CourseID = 2021, Title = "Composition", Credits = 3, DepartmentID = 1 }, new Course { CourseID = 2042, Title = "Literature", Credits = 4, DepartmentID = 1 } }; courses.ForEach(s => context.Courses.AddOrUpdate(s)); context.SaveChanges(); courses[0].Instructors.Add(instructors[0]); courses[0].Instructors.Add(instructors[1]); courses[1].Instructors.Add(instructors[2]); courses[2].Instructors.Add(instructors[2]); courses[3].Instructors.Add(instructors[3]); courses[4].Instructors.Add(instructors[3]); courses[5].Instructors.Add(instructors[3]); courses[6].Instructors.Add(instructors[3]); context.SaveChanges();Referensi untuk
Listmemiliki garis merah bergelombang di bawahnya karena Anda belum memiliki pernyataanusinguntuk namespace tersebut. Klik kanan salah satu instansListdan klik Atasi, lalu klik menggunakan System.Collections.Generic.
Pilihan menu ini menambahkan kode berikut ke
usingpernyataan di dekat bagian atas file.using System.Collections.Generic;Tekan CTRL-SHIFT-B untuk membangun proyek.
Proyek ini sekarang siap untuk menyebarkan database ContosoUniversity . Setelah Anda menyebarkan aplikasi, pertama kali Anda menjalankannya dan menavigasi ke halaman yang mengakses database, Code First akan membuat database dan menjalankan metode ini Seed .
Nota
Menambahkan kode ke Seed metode adalah salah satu dari banyak cara untuk menyisipkan data tetap ke dalam database. Alternatifnya adalah menambahkan kode ke dalam metode Up dan Down dari setiap kelas migrasi. Metode Up dan Down berisi kode yang mengimplementasikan perubahan database. Anda akan melihat contohnya dalam tutorial Menyebarkan Pembaruan Database .
Anda juga dapat menulis kode yang menjalankan pernyataan SQL dengan menggunakan metode .Sql Misalnya, jika Anda menambahkan kolom Anggaran ke tabel Departemen dan ingin menginisialisasi semua anggaran departemen ke $1.000,00 sebagai bagian dari migrasi, Anda dapat menambahkan baris kode berikut ke metode untuk migrasi tersebut Up :
Sql("UPDATE Department SET Budget = 1000");
Membuat skrip untuk penyebaran database keanggotaan
Aplikasi Contoso University menggunakan sistem keanggotaan ASP.NET dan autentikasi formulir untuk mengautentikasi dan mengotorisasi pengguna. Halaman Perbarui Kredit hanya dapat diakses oleh pengguna yang berada dalam peran Administrator.
Jalankan aplikasi dan klik Kursus, lalu klik Perbarui Kredit.
Halaman Masuk muncul karena halaman Perbarui Kredit memerlukan hak administratif.
Masukkan admin sebagai nama pengguna dan devpwd sebagai kata sandi dan klik Masuk.
Halaman Perbarui Kredit muncul.
Informasi pengguna dan peran ada di database aspnet-ContosoUniversity yang ditentukan oleh string koneksi DefaultConnection dalam file Web.config .
Database ini tidak dikelola oleh Entity Framework Code First, sehingga Anda tidak dapat menggunakan Migrasi untuk mengimplementasikannya. Anda akan menggunakan penyedia dbDacFx untuk menyebarkan skema database, dan Anda akan mengonfigurasi profil penerbitan untuk menjalankan skrip yang akan menyisipkan data awal ke dalam tabel database.
Nota
Sistem keanggotaan ASP.NET baru (sekarang bernama ASP.NET Identity) diperkenalkan dengan Visual Studio 2013. Sistem baru memungkinkan Anda menyimpan tabel aplikasi dan keanggotaan dalam database yang sama. Anda juga dapat menggunakan Code First Migrations untuk menerapkan keduanya. Aplikasi sampel menggunakan sistem keanggotaan ASP.NET sebelumnya, yang tidak dapat disebarkan dengan menggunakan Migrasi Pertama Kode. Prosedur untuk menyebarkan database keanggotaan ini juga berlaku untuk skenario lain di mana aplikasi Anda perlu menyebarkan database SQL Server yang tidak dibuat oleh Kode Kerangka Kerja Entitas Terlebih Dahulu.
Di sini juga, Anda biasanya tidak ingin data yang sama di tahap produksi yang Anda miliki di tahap pengembangan. Saat Anda menyebarkan situs untuk pertama kalinya, adalah umum untuk mengecualikan sebagian besar atau semua akun pengguna yang Anda buat untuk pengujian. Oleh karena itu, proyek yang diunduh memiliki dua database keanggotaan: aspnet-ContosoUniversity.mdf dengan pengguna pengembangan dan aspnet-ContosoUniversity-Prod.mdf dengan pengguna produksi. Untuk tutorial ini, nama pengguna sama di kedua database: admin dan nonadmin. Kedua pengguna memiliki devpwd kata sandi dalam database pengembangan dan prodpwd dalam database produksi.
Anda akan mendeploy pengguna pengembangan ke lingkungan pengujian dan pengguna produksi ke lingkungan staging dan produksi. Untuk melakukannya, Anda akan membuat dua skrip SQL dalam tutorial ini, satu untuk pengembangan dan satu untuk produksi, dan dalam tutorial selanjutnya Anda akan mengonfigurasi proses penerbitan untuk menjalankannya.
Nota
Database keanggotaan menyimpan hash kata sandi akun. Untuk menyebarkan akun dari satu komputer ke komputer lain, Anda harus memastikan bahwa rutinitas hashing tidak menghasilkan hash yang berbeda di server tujuan daripada yang mereka lakukan di komputer sumber. Mereka akan menghasilkan hash yang sama ketika Anda menggunakan Penyedia Universal ASP.NET, selama Anda tidak mengubah algoritma default. Algoritma default HMACSHA256 dan ditentukan dalam atribut validasi elemen machineKey dalam file Web.config.
Anda dapat membuat skrip penyebaran data secara manual, dengan menggunakan SQL Server Management Studio (SSMS), atau dengan menggunakan alat pihak ketiga. Sisa tutorial ini akan menunjukkan kepada Anda cara melakukannya di SQL Server Management Studio, tetapi jika Anda tidak ingin menginstal dan menggunakan SSMS, Anda bisa mendapatkan skrip dari versi proyek yang telah selesai dan melompat ke bagian tempat Anda menyimpannya di folder solusi.
Untuk menginstal SSMS, instal dari Pusat Unduhan: Microsoft SQL Server 2012 Express dengan mengklik ENU\x64\SQLManagementStudio_x64_ENU.exe atau ENU\x86\SQLManagementStudio_x86_ENU.exe. Jika Anda memilih yang salah untuk sistem Anda, sistem akan gagal diinstal dan Anda dapat mencoba yang lain.
(Perhatikan bahwa ini adalah unduhan 600 megabyte. Mungkin perlu waktu lama untuk menginstal dan akan memerlukan boot ulang komputer Anda.)
Pada halaman pertama Pusat Penginstalan SQL Server, klik Penginstalan mandiri SQL Server Baru atau tambahkan fitur ke penginstalan yang ada, dan ikuti instruksi, menerima pilihan default.
Membuat skrip database pengembangan
Jalankan SSMS.
Dalam kotak dialog Sambungkan ke Server , masukkan (localdb)\v11.0 sebagai Nama server, biarkan Autentikasi diatur ke Autentikasi Windows, lalu klik Sambungkan.
Di jendela Object Explorer , perluas Database, klik kanan aspnet-ContosoUniversity, klik Tugas, lalu klik Buat Skrip.
Dalam kotak dialog Buat dan Terbitkan Skrip , klik Atur Opsi Pembuatan Skrip.
Anda bisa melewati langkah Pilih Objek karena defaultnya adalah Skrip seluruh database dan semua objek database dan itulah yang Anda inginkan.
Klik Tingkat Lanjut.
Dalam kotak dialog Opsi Skrip Tingkat Lanjut , gulir ke bawah ke Jenis data ke skrip, dan klik opsi Data saja di daftar drop-down.
Ubah Skrip USE DATABASE menjadi False. Pernyataan USE tidak valid untuk Azure SQL Database dan tidak diperlukan untuk penyebaran ke SQL Server Express di lingkungan pengujian.
Klik OK.
Dalam kotak dialog Buat dan Terbitkan Skrip , kotak Nama file menentukan tempat skrip akan dibuat. Ubah jalur ke folder solusi Anda (folder yang memiliki file ContosoUniversity.sln Anda) dan nama file menjadi aspnet-data-dev.sql.
Klik Berikutnya untuk masuk ke tab Ringkasan , lalu klik Berikutnya lagi untuk membuat skrip.
Klik Selesai.
Membuat skrip database produksi
Karena Anda belum menjalankan proyek dengan database produksi, proyek tersebut belum dilampirkan ke instans LocalDB. Oleh karena itu Anda perlu melampirkan database terlebih dahulu.
Di SQL Server Management Studio Object Explorer, klik kanan Database dan klik Lampirkan.
Dalam kotak dialog Lampirkan Database , klik Tambahkan lalu navigasikan ke file aspnet-ContosoUniversity-Prod.mdf di folder App_Data .
Klik OK.
Ikuti prosedur yang sama dengan yang Anda gunakan sebelumnya untuk membuat skrip untuk file produksi. Beri nama file skrip aspnet-data-prod.sql.
RINGKASAN
Kedua database sekarang siap untuk disebarkan dan Anda memiliki dua skrip penyebaran data di folder solusi Anda.
Skrip penyebaran data
Dalam tutorial berikut, Anda mengonfigurasi pengaturan proyek yang memengaruhi penyebaran, dan Anda menyiapkan transformasi file Web.config otomatis untuk pengaturan yang harus berbeda dalam aplikasi yang disebarkan.
Informasi Lainnya
Untuk informasi selengkapnya tentang NuGet, lihat Mengelola Pustaka Proyek dengan Dokumentasi NuGet dan NuGet. Jika Anda tidak ingin menggunakan NuGet, Anda harus mempelajari cara menganalisis paket NuGet untuk menentukan apa yang dilakukannya saat diinstal. (Misalnya, ini mungkin mengonfigurasi transformasi Web.config , mengonfigurasi skrip PowerShell untuk dijalankan pada waktu build, dll.) Untuk mempelajari selengkapnya tentang cara kerja NuGet, lihat Membuat dan Menerbitkan File Paket dan Konfigurasi dan Transformasi Kode Sumber.