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.
Gambaran Umum
Tutorial ini menunjukkan cara menyiapkan proyek untuk penyebaran database. Struktur database dan beberapa (tidak semua) data dalam dua database aplikasi harus disebarkan untuk menguji, penahapan, dan lingkungan 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.
LocalDB SQL Server Express
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 yakinlah bahwa aplikasi akan bertingkah sama dalam produksi, dengan beberapa pengecualian untuk fitur yang bervariasi antara SQL Server Editions.
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 disarankan 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 bekerja 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 termasuk dalam .NET Framework:
- ASP.NET Universal Providers (memungkinkan sistem keanggotaan ASP.NET menggunakan database Azure SQL)
- Entity Framework
Karena perangkat lunak ini termasuk dalam paket NuGet, proyek sudah disiapkan sehingga rakitan yang diperlukan disebarkan dengan proyek. (Tautan menunjuk ke versi paket ini saat 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 Migrasi Pertama Kode yang lebih lama memerlukan Kepercayaan Penuh, 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 .
Mengonfigurasi Migrasi Pertama Kode untuk penyebaran database aplikasi
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 Migrasi Seed
Pertama Kode yang disisipkan ke dalam database hanya data yang ingin Anda berada di sana dalam produksi. Metode ini Seed
tidak boleh menyisipkan data pengujian karena akan berjalan dalam produksi setelah Code First membuat database dalam produksi.
Dalam versi Code First yang lebih lama sebelum Migrasi dirilis, biasanya Seed
metode untuk menyisipkan data pengujian juga, karena dengan setiap perubahan model selama pengembangan database harus dihapus sepenuhnya dan dibuat ulang dari awal. Dengan Migrasi Pertama Kode, data pengujian dipertahankan setelah perubahan database, jadi termasuk data pengujian dalam Seed
metode ini tidak diperlukan. Proyek yang Anda unduh menggunakan metode termasuk semua data dalam Seed
metode kelas penginisialisasi. Dalam tutorial ini Anda akan menonaktifkan kelas penginisialisasi tersebut dan mengaktifkan Migrasi. Kemudian Anda akan memperbarui Seed
metode di kelas konfigurasi Migrasi sehingga hanya menyisipkan data yang ingin Anda sisipkan dalam produksi.
Diagram berikut mengilustrasikan skema database aplikasi:
Untuk tutorial ini, Anda akan berasumsi bahwa Student
tabel dan Enrollment
harus kosong ketika situs pertama kali disebarkan. Tabel lain berisi data yang harus dimuat sebelumnya saat aplikasi ditayangkan.
Menonaktifkan penginisialisasi
Karena Anda akan menggunakan Migrasi Pertama Kode, Anda tidak perlu menggunakan penginisialisasi DropCreateDatabaseIfModelChanges
Kode Pertama. Kode untuk penginisialisasi ini ada di 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>
Catatan
Cara lain untuk menentukan kelas penginisialisasi adalah melakukannya 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.
Catatan
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 menggunakan pernyataan untuk namespace yang sudah tidak ada lagi, klik kanan dan klik Atasi untuk menambahkan menggunakan pernyataan di mana diperlukan, dan ubah kemunculan 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. Migrasi Pertama Kode akan terlihat di proyek startup untuk menemukan string koneksi database.
Dari menu Alat , pilih NuGet Package Manager>Package Manager Console.
Di bagian atas jendela Konsol Manajer Paket pilih ContosoUniversity.DAL sebagai proyek default lalu pada
PM>
perintah masukkan "enable-migrations".(Jika Anda mendapatkan kesalahan yang mengatakan perintah enable-migrations tidak dikenali, masukkan perintah update-package EntityFramework -Instal ulang 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-migrations
perintah harus dijalankan dalam proyek yang berisi kelas konteks Kode Pertama. Ketika kelas tersebut berada dalam proyek pustaka kelas, Migrasi Pertama Kode mencari string koneksi database dalam proyek startup untuk 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-migrations
secara otomatis membuat migrasi pertama karena database sudah ada. Alternatifnya adalah meminta Migrasi 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".
Menyiapkan metode Seed
Untuk tutorial ini, Anda akan menambahkan data tetap dengan menambahkan kode ke Seed
metode kelas Migrasi Configuration
Pertama Kode. Migrasi Pertama Kode memanggil Seed
metode 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
Seed
metode 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
List
memiliki garis berlekuk merah di bawahnya karena Anda belum memilikiusing
pernyataan untuk namespace layanannya. Klik kanan salah satu instansList
dan klik Atasi, lalu klik menggunakan System.Collections.Generic.Pilihan menu ini menambahkan kode berikut ke
using
pernyataan 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
.
Catatan
Menambahkan kode ke Seed
metode adalah salah satu dari banyak cara untuk menyisipkan data tetap ke dalam database. Alternatifnya adalah menambahkan kode ke Up
metode 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 Sql
metode . 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 membentuk autentikasi 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 Kode Kerangka Kerja Entitas Terlebih Dahulu, sehingga Anda tidak dapat menggunakan Migrasi untuk menyebarkannya. 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.
Catatan
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, dan Anda dapat menggunakan Migrasi Pertama Kode untuk menyebarkan 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 menginginkan data yang sama dalam produksi yang Anda miliki dalam 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 menyebarkan pengguna pengembangan ke lingkungan pengujian dan pengguna produksi untuk penahapan 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.
Catatan
Database keanggotaan menyimpan hash kata sandi akun. Untuk menyebarkan akun dari satu komputer ke komputer lain, Anda harus memastikan bahwa rutinitas hash 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 adalah 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 SQL Server Management Studio, 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, itu 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 Baru SQL Server penginstalan mandiri 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 Hasilkan 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 GUNAKAN DATABASE menjadi False. Pernyataan USE tidak valid untuk Azure SQL Database dan tidak diperlukan agar penyebaran 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 belum dilampirkan ke instans LocalDB. Oleh karena itu Anda perlu melampirkan database terlebih dahulu.
Di Object Explorer SQL Server Management Studio, 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.
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 Lebih Lanjut
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.