Bagikan melalui


Tutorial: Mulai menggunakan Kode Entity Framework 6 Terlebih Dahulu menggunakan MVC 5

Catatan

Untuk pengembangan baru, sebaiknya ASP.NET Core Razor Pages melalui ASP.NET pengontrol dan tampilan MVC. Untuk seri tutorial yang mirip dengan yang ini menggunakan Halaman Razor, lihat Tutorial: Mulai menggunakan Halaman Razor di ASP.NET Core. Tutorial baru:

  • Lebih mudah diikuti.
  • Menyediakan lebih banyak praktik terbaik EF Core.
  • Menggunakan kueri yang lebih efisien.
  • Lebih terkini dengan API terbaru.
  • Mencakup lebih banyak fitur.
  • Adalah pendekatan yang disukai untuk pengembangan aplikasi baru.

Dalam rangkaian tutorial ini, Anda mempelajari cara membuat aplikasi ASP.NET MVC 5 yang menggunakan Entity Framework 6 untuk akses data. Tutorial ini menggunakan alur kerja Code First. Untuk informasi tentang cara memilih antara Kode Pertama, Database Pertama, dan Model Pertama, lihat Membuat model.

Seri tutorial ini menjelaskan cara membangun aplikasi sampel Contoso University. Aplikasi sampel adalah situs web universitas sederhana. Dengan itu, Anda dapat melihat dan memperbarui informasi siswa, kursus, dan instruktur. Berikut adalah dua layar yang Anda buat:

Students_Index_page

Edit Siswa

Di tutorial ini, Anda akan:

  • Membuat aplikasi web MVC
  • Menyiapkan gaya situs
  • Menginstal Entity Framework 6
  • Membuat model data
  • Membuat konteks database
  • Menginisialisasi DB dengan data pengujian
  • Menyiapkan EF 6 untuk menggunakan LocalDB
  • Membuat pengontrol dan tampilan
  • Menampilkan database

Prasyarat

Membuat aplikasi web MVC

  1. Buka Visual Studio dan buat proyek web C# menggunakan templat ASP.NET Web Application (.NET Framework). Beri nama proyek ContosoUniversity dan pilih OK.

    Kotak dialog Proyek Baru di Visual Studio

  2. Di New ASP.NET Web Application - ContosoUniversity, pilih MVC.

    Kotak dialog aplikasi web baru di Visual Studio

    Catatan

    Secara default, opsi Autentikasi diatur ke Tanpa Autentikasi. Untuk tutorial ini, aplikasi web tidak mengharuskan pengguna untuk masuk. Selain itu, ini tidak membatasi akses berdasarkan siapa yang masuk.

  3. Pilih OK untuk membuat proyek.

Menyiapkan gaya situs

Beberapa perubahan sederhana akan menyiapkan menu situs, tata letak, dan beranda.

  1. Buka Views\Shared\_Layout.cshtml, dan buat perubahan berikut:

    • Ubah setiap kemunculan "Aplikasi ASP.NET Saya" dan "Nama aplikasi" menjadi "Universitas Contoso".
    • Tambahkan entri menu untuk Siswa, Kursus, Instruktur, dan Departemen, dan hapus entri Kontak.

    Perubahan disorot dalam cuplikan kode berikut:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>@ViewBag.Title - Contoso University</title>
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    </head>
    <body>
        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="navbar-inner">
                <div class="container">
                    <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    @Html.ActionLink("Contoso University", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
                    <div class="nav-collapse collapse">
                        <ul class="nav">
                            <li>@Html.ActionLink("Home", "Index", "Home")</li>
                            <li>@Html.ActionLink("About", "About", "Home")</li>
                            <li>@Html.ActionLink("Students", "Index", "Student")</li>
                            <li>@Html.ActionLink("Courses", "Index", "Course")</li>
                            <li>@Html.ActionLink("Instructors", "Index", "Instructor")</li>
                            <li>@Html.ActionLink("Departments", "Index", "Department")</li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    
        <div class="container">
            @RenderBody()
            <hr />
            <footer>
                <p>&copy; @DateTime.Now.Year - Contoso University</p>
            </footer>
        </div>
    
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/bootstrap")
        @RenderSection("scripts", required: false)
    </body>
    </html>
    
  2. Di Views\Home\Index.cshtml, ganti konten file dengan kode berikut untuk mengganti teks tentang ASP.NET dan MVC dengan teks tentang aplikasi ini:

    @{
        ViewBag.Title = "Home Page";
    }
    
    <div class="jumbotron">
        <h1>Contoso University</h1>
    </div>
    <div class="row">
        <div class="col-md-4">
            <h2>Welcome to Contoso University</h2>
            <p>Contoso University is a sample application that
            demonstrates how to use Entity Framework 6 in an 
            ASP.NET MVC 5 web application.</p>
        </div>
        <div class="col-md-4">
            <h2>Build it from scratch</h2>
            <p>You can build the application by following the steps in the tutorial series on the ASP.NET site.</p>
            <p><a class="btn btn-default" href="http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/">See the tutorial &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2>Download it</h2>
            <p>You can download the completed project.</p>
            <p><a class="btn btn-default" href="https://webpifeed.blob.core.windows.net/webpifeed/Partners/ASP.NET%20MVC%20Application%20Using%20Entity%20Framework%20Code%20First.zip">Download &raquo;</a></p>
        </div>
    </div>
    
  3. Tekan Ctrl+F5 untuk menjalankan situs web. Anda melihat halaman beranda dengan menu utama.

Menginstal Entity Framework 6

  1. Dari menu Alat, pilih Pengelola Paket NuGet, lalu pilih Konsol Manajer Paket.

  2. Di jendela Konsol Manajer Paket, masukkan perintah berikut:

    Install-Package EntityFramework
    

Langkah ini adalah salah satu dari beberapa langkah yang telah Anda lakukan tutorial ini secara manual, tetapi itu bisa dilakukan secara otomatis oleh fitur perancah MVC ASP.NET. Anda melakukannya secara manual sehingga Anda dapat melihat langkah-langkah yang diperlukan untuk menggunakan Kerangka Kerja Entitas (EF). Anda akan menggunakan perancah nanti untuk membuat pengontrol dan tampilan MVC. Alternatifnya adalah membiarkan perancah secara otomatis menginstal paket EF NuGet, membuat kelas konteks database, dan membuat string koneksi. Ketika Anda siap untuk melakukannya dengan cara itu, yang harus Anda lakukan adalah melewati langkah-langkah tersebut dan perancah pengontrol MVC Anda setelah Anda membuat kelas entitas Anda.

Membuat model data

Selanjutnya Anda akan membuat kelas entitas untuk aplikasi Contoso University. Anda akan mulai dengan tiga entitas berikut:

Kursus-Pendaftaran-Siswa<><>

Entitas Hubungan
Kursus untuk Pendaftaran Satu ke Banyak
Siswa ke Pendaftaran Satu ke Banyak

Ada hubungan satu-ke-banyak antara Student Enrollment dan entitas, dan ada hubungan satu-ke-banyak antara Course dan Enrollment entitas. Dengan kata lain, siswa dapat terdaftar di sejumlah kursus, dan kursus dapat memiliki sejumlah siswa yang terdaftar di dalamnya.

Di bagian berikut, Anda akan membuat kelas untuk masing-masing entitas ini.

Catatan

Jika Anda mencoba mengkompilasi proyek sebelum selesai membuat semua kelas entitas ini, Anda akan mendapatkan kesalahan kompilator.

Entitas Siswa

  • Di folder Model, buat file kelas bernama Student.cs dengan mengklik kanan folder di Penjelajah Solusi dan memilih Tambahkan>Kelas. Ganti kode templat dengan kode berikut:

    using System;
    using System.Collections.Generic;
    
    namespace ContosoUniversity.Models
    {
        public class Student
        {
            public int ID { get; set; }
            public string LastName { get; set; }
            public string FirstMidName { get; set; }
            public DateTime EnrollmentDate { get; set; }
            
            public virtual ICollection<Enrollment> Enrollments { get; set; }
        }
    }
    

Properti ID akan menjadi kolom kunci utama tabel database yang sesuai dengan kelas ini. Secara default, Entity Framework menginterpretasikan properti yang diberi nama ID atau nama ID kelas sebagai kunci utama.

Properti Enrollments adalah properti navigasi. Properti navigasi menyimpan entitas lain yang terkait dengan entitas ini. Dalam hal ini, Enrollments properti Student entitas akan menampung semua entitas yang terkait dengan Student entitas tersebutEnrollment. Dengan kata lain, jika baris tertentu Student dalam database memiliki dua baris terkait Enrollment (baris yang berisi nilai kunci utama siswa di kolom kunci asing mereka StudentID ), Student properti navigasi entitas tersebut Enrollments akan berisi dua Enrollment entitas tersebut.

Properti navigasi biasanya didefinisikan virtual sehingga dapat memanfaatkan fungsionalitas Kerangka Kerja Entitas tertentu seperti pemuatan malas. (Pemuatan malas akan dijelaskan nanti, di Tutorial Membaca Data Terkait nanti dalam seri ini.)

Jika properti navigasi dapat menampung beberapa entitas (seperti dalam hubungan banyak ke banyak atau satu-ke-banyak), jenisnya harus berupa daftar di mana entri dapat ditambahkan, dihapus, dan diperbarui, seperti ICollection.

Entitas Pendaftaran

  • Di folder Model, buat Enrollment.cs dan ganti kode yang ada dengan kode berikut:

    namespace ContosoUniversity.Models
    {
        public enum Grade
        {
            A, B, C, D, F
        }
    
        public class Enrollment
        {
            public int EnrollmentID { get; set; }
            public int CourseID { get; set; }
            public int StudentID { get; set; }
            public Grade? Grade { get; set; }
            
            public virtual Course Course { get; set; }
            public virtual Student Student { get; set; }
        }
    }
    

Properti EnrollmentID akan menjadi kunci utama; entitas ini menggunakan pola nama ID kelas alih-alih ID dengan sendirinya Student seperti yang Anda lihat di entitas. Biasanya Anda akan memilih satu pola dan menggunakannya di seluruh model data Anda. Di sini, variasi menggambarkan bahwa Anda dapat menggunakan salah satu pola. Dalam tutorial selanjutnya, Anda akan melihat cara menggunakan ID tanpa classname mempermudah penerapan warisan dalam model data.

Properti Grade adalah enum. Tanda tanya setelah Grade deklarasi jenis menunjukkan bahwa Grade properti dapat diubah ke null. Nilai null berbeda dari nilai nol — null berarti nilai belum diketahui atau belum ditetapkan.

Properti StudentID adalah kunci asing, dan properti navigasi yang sesuai adalah Student. Entitas Enrollment dikaitkan dengan satu Student entitas, sehingga properti hanya dapat menampung satu Student entitas (tidak seperti Student.Enrollments properti navigasi yang Anda lihat sebelumnya, yang dapat menampung beberapa Enrollment entitas).

Properti CourseID adalah kunci asing, dan properti navigasi yang sesuai adalah Course. Entitas Enrollment dikaitkan dengan satu Course entitas.

Entity Framework menginterpretasikan properti sebagai properti kunci asing jika <bernama nama properti navigasi nama>>< properti kunci utama (misalnya, StudentID untuk Student properti navigasi karena Student kunci utama entitas adalah ).ID Properti kunci asing juga dapat diberi nama properti> kunci primer yang sama (<misalnya, Course CourseID karena kunci utama entitas adalah CourseID).

Entitas Kursus

  • Di folder Model, buat Course.cs, ganti kode templat dengan kode berikut:

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations.Schema;
    
    namespace ContosoUniversity.Models
    {
        public class Course
        {
            [DatabaseGenerated(DatabaseGeneratedOption.None)]
            public int CourseID { get; set; }
            public string Title { get; set; }
            public int Credits { get; set; }
            
            public virtual ICollection<Enrollment> Enrollments { get; set; }
        }
    }
    

Properti Enrollments adalah properti navigasi. Entitas Course dapat terkait dengan sejumlah Enrollment entitas.

Kita akan mengatakan lebih lanjut DatabaseGeneratedAttribute tentang atribut dalam tutorial selanjutnya dalam seri ini. Pada dasarnya, atribut ini memungkinkan Anda memasukkan kunci utama untuk kursus daripada membuat database.

Membuat konteks database

Kelas utama yang mengoordinasikan fungsionalitas Kerangka Kerja Entitas untuk model data tertentu adalah kelas konteks database. Anda membuat kelas ini dengan berasal dari kelas System.Data.Entity.DbContext . Dalam kode, Anda menentukan entitas mana yang disertakan dalam model data. Anda juga dapat menyesuaikan perilaku Kerangka Kerja Entitas tertentu. Dalam proyek ini, kelas diberi nama SchoolContext.

  • Untuk membuat folder di proyek ContosoUniversity, klik kanan proyek di Penjelajah Solusi dan klik Tambahkan, lalu klik Folder Baru. Beri nama folder baru DAL (untuk Lapisan Akses Data). Di folder tersebut, buat file kelas baru bernama SchoolContext.cs, dan ganti kode templat dengan kode berikut:

    using ContosoUniversity.Models;
    using System.Data.Entity;
    using System.Data.Entity.ModelConfiguration.Conventions;
    
    namespace ContosoUniversity.DAL
    {
        public class SchoolContext : DbContext
        {
        
            public SchoolContext() : base("SchoolContext")
            {
            }
            
            public DbSet<Student> Students { get; set; }
            public DbSet<Enrollment> Enrollments { get; set; }
            public DbSet<Course> Courses { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            }
        }
    }
    

Tentukan set entitas

Kode ini membuat properti DbSet untuk setiap set entitas. Dalam terminologi Kerangka Kerja Entitas, kumpulan entitas biasanya sesuai dengan tabel database, dan entitas sesuai dengan baris dalam tabel.

Catatan

Anda dapat menghilangkan DbSet<Enrollment> pernyataan dan DbSet<Course> dan itu akan bekerja sama. Kerangka Kerja Entitas akan menyertakannya secara implisit karena Student entitas mereferensikan Enrollment entitas dan entitas mereferensikan Enrollment Course entitas.

Tentukan string koneksi

Nama string koneksi (yang akan Anda tambahkan ke file Web.config nanti) diteruskan ke konstruktor.

public SchoolContext() : base("SchoolContext")
{
}

Anda juga dapat meneruskan string koneksi itu sendiri alih-alih nama yang disimpan dalam file Web.config. Untuk informasi selengkapnya tentang opsi untuk menentukan database yang akan digunakan, lihat String dan model koneksi.

Jika Anda tidak menentukan string koneksi atau nama satu secara eksplisit, Kerangka Kerja Entitas mengasumsikan bahwa nama string koneksi sama dengan nama kelas. Nama string koneksi default dalam contoh ini kemudian akan menjadi SchoolContext, sama dengan apa yang Anda tentukan secara eksplisit.

Tentukan nama tabel tunggal

Pernyataan modelBuilder.Conventions.Remove dalam metode OnModelCreating mencegah nama tabel di-pluralisasi. Jika Anda tidak melakukan ini, tabel yang dihasilkan dalam database akan diberi nama Students, Courses, dan Enrollments. Sebagai gantinya, nama tabel akan menjadi Student, Course, dan Enrollment. Pengembang tidak setuju tentang apakah nama tabel harus di-pluralisasi atau tidak. Tutorial ini menggunakan bentuk tunggal, tetapi poin pentingnya adalah Anda dapat memilih formulir mana pun yang Anda sukai dengan menyertakan atau menghilangkan baris kode ini.

Menginisialisasi DB dengan data pengujian

Entity Framework dapat secara otomatis membuat (atau menghilangkan dan membuat ulang) database untuk Anda saat aplikasi berjalan. Anda dapat menentukan bahwa ini harus dilakukan setiap kali aplikasi Anda berjalan atau hanya ketika model tidak sinkron dengan database yang ada. Anda juga dapat menulis Seed metode yang dipanggil Entity Framework secara otomatis setelah membuat database untuk mengisinya dengan data pengujian.

Perilaku default adalah membuat database hanya jika tidak ada (dan melemparkan pengecualian jika model telah berubah dan database sudah ada). Di bagian ini, Anda akan menentukan bahwa database harus dihilangkan dan dibuat ulang setiap kali model berubah. Menghilangkan database menyebabkan hilangnya semua data Anda. Ini umumnya baik-baik saja selama pengembangan, karena Seed metode akan berjalan ketika database dibuat ulang dan akan membuat ulang data pengujian Anda. Tetapi dalam produksi Anda umumnya tidak ingin kehilangan semua data Anda setiap kali Anda perlu mengubah skema database. Nantinya Anda akan melihat cara menangani perubahan model dengan menggunakan Migrasi Pertama Kode untuk mengubah skema database alih-alih menghilangkan dan membuat ulang database.

  1. Di folder DAL, buat file kelas baru bernama SchoolInitializer.cs dan ganti kode templat dengan kode berikut, yang menyebabkan database dibuat saat diperlukan dan memuat data pengujian ke database baru.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using ContosoUniversity.Models;
    
    namespace ContosoUniversity.DAL
    {
        public class SchoolInitializer : System.Data.Entity. DropCreateDatabaseIfModelChanges<SchoolContext>
        {
            protected override void Seed(SchoolContext context)
            {
                var students = new List<Student>
                {
                new Student{FirstMidName="Carson",LastName="Alexander",EnrollmentDate=DateTime.Parse("2005-09-01")},
                new Student{FirstMidName="Meredith",LastName="Alonso",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Arturo",LastName="Anand",EnrollmentDate=DateTime.Parse("2003-09-01")},
                new Student{FirstMidName="Gytis",LastName="Barzdukas",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Yan",LastName="Li",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Peggy",LastName="Justice",EnrollmentDate=DateTime.Parse("2001-09-01")},
                new Student{FirstMidName="Laura",LastName="Norman",EnrollmentDate=DateTime.Parse("2003-09-01")},
                new Student{FirstMidName="Nino",LastName="Olivetto",EnrollmentDate=DateTime.Parse("2005-09-01")}
                };
    
                students.ForEach(s => context.Students.Add(s));
                context.SaveChanges();
                var courses = new List<Course>
                {
                new Course{CourseID=1050,Title="Chemistry",Credits=3,},
                new Course{CourseID=4022,Title="Microeconomics",Credits=3,},
                new Course{CourseID=4041,Title="Macroeconomics",Credits=3,},
                new Course{CourseID=1045,Title="Calculus",Credits=4,},
                new Course{CourseID=3141,Title="Trigonometry",Credits=4,},
                new Course{CourseID=2021,Title="Composition",Credits=3,},
                new Course{CourseID=2042,Title="Literature",Credits=4,}
                };
                courses.ForEach(s => context.Courses.Add(s));
                context.SaveChanges();
                var enrollments = new List<Enrollment>
                {
                new Enrollment{StudentID=1,CourseID=1050,Grade=Grade.A},
                new Enrollment{StudentID=1,CourseID=4022,Grade=Grade.C},
                new Enrollment{StudentID=1,CourseID=4041,Grade=Grade.B},
                new Enrollment{StudentID=2,CourseID=1045,Grade=Grade.B},
                new Enrollment{StudentID=2,CourseID=3141,Grade=Grade.F},
                new Enrollment{StudentID=2,CourseID=2021,Grade=Grade.F},
                new Enrollment{StudentID=3,CourseID=1050},
                new Enrollment{StudentID=4,CourseID=1050,},
                new Enrollment{StudentID=4,CourseID=4022,Grade=Grade.F},
                new Enrollment{StudentID=5,CourseID=4041,Grade=Grade.C},
                new Enrollment{StudentID=6,CourseID=1045},
                new Enrollment{StudentID=7,CourseID=3141,Grade=Grade.A},
                };
                enrollments.ForEach(s => context.Enrollments.Add(s));
                context.SaveChanges();
            }
        }
    }
    

    Metode ini Seed mengambil objek konteks database sebagai parameter input, dan kode dalam metode menggunakan objek tersebut untuk menambahkan entitas baru ke database. Untuk setiap jenis entitas, kode membuat kumpulan entitas baru, menambahkannya ke properti yang sesuai DbSet , lalu menyimpan perubahan ke database. Tidak perlu memanggil SaveChanges metode setelah setiap grup entitas, seperti yang dilakukan di sini, tetapi melakukan itu membantu Anda menemukan sumber masalah jika terjadi pengecualian saat kode menulis ke database.

  2. Untuk memberi tahu Entity Framework untuk menggunakan kelas initializer Anda, tambahkan elemen ke entityFramework elemen dalam file Web.config aplikasi (yang ada di folder proyek root), seperti yang ditunjukkan dalam contoh berikut:

    <entityFramework>
      <contexts>
        <context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity">
          <databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity" />
        </context>
      </contexts>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="v11.0" />
        </parameters>
      </defaultConnectionFactory>
      <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      </providers>
    </entityFramework>
    

    context type menentukan nama kelas konteks yang sepenuhnya memenuhi syarat dan assembly tempatnya berada, dan databaseinitializer type menentukan nama kelas inisialisasi yang sepenuhnya memenuhi syarat dan assembly tempatnya berada. (Ketika Anda tidak ingin EF menggunakan penginisialisasi, Anda dapat mengatur atribut pada context elemen: disableDatabaseInitialization="true".) Untuk informasi selengkapnya, lihat Pengaturan File Konfigurasi.

    Alternatif untuk mengatur penginisialisasi dalam file Web.config adalah melakukannya dalam kode dengan menambahkan Database.SetInitializer pernyataan ke Application_Start metode dalam file Global.asax.cs. Untuk informasi selengkapnya, lihat Memahami Penginisialisasi Database di Kode Kerangka Kerja Entitas Terlebih Dahulu.

Aplikasi sekarang disiapkan sehingga ketika Anda mengakses database untuk pertama kalinya dalam eksekusi aplikasi tertentu, Kerangka Kerja Entitas membandingkan database dengan model (kelas entitas dan Anda SchoolContext ). Jika ada perbedaan, aplikasi akan menghilangkan dan membuat ulang database.

Catatan

Saat Anda menyebarkan aplikasi ke server web produksi, Anda harus menghapus atau menonaktifkan kode yang menghilangkan dan membuat ulang database. Anda akan melakukannya dalam tutorial selanjutnya dalam seri ini.

Menyiapkan EF 6 untuk menggunakan LocalDB

LocalDB adalah versi ringan dari mesin database SQL Server Express. Sangat mudah untuk menginstal dan mengonfigurasi, memulai sesuai permintaan, dan berjalan dalam mode pengguna. LocalDB berjalan dalam mode eksekusi khusus SQL Server Express yang memungkinkan Anda bekerja dengan database sebagai file .mdf . Anda bisa meletakkan file database LocalDB di folder App_Data proyek web jika Anda ingin dapat menyalin database dengan proyek. 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 . LocalDB diinstal secara default dengan Visual Studio.

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.

  • Dalam tutorial ini, Anda akan bekerja dengan LocalDB. Buka file Web.config aplikasi dan tambahkan connectionStrings elemen yang mendahului appSettings elemen, seperti yang ditunjukkan dalam contoh berikut. (Pastikan Anda memperbarui File Web.config di folder proyek akar. Ada juga file Web.config di subfolder Tampilan yang tidak perlu Anda perbarui.)

    <connectionStrings>
        <add name="SchoolContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=ContosoUniversity1;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <appSettings>
      <add key="webpages:Version" value="3.0.0.0" />
      <add key="webpages:Enabled" value="false" />
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    

string koneksi yang telah Anda tambahkan menentukan bahwa Kerangka Kerja Entitas akan menggunakan database LocalDB bernama ContosoUniversity1.mdf. (Database belum ada tetapi EF akan membuatnya.) Jika Anda ingin membuat database di folder App_Data, Anda bisa menambahkan AttachDBFilename=|DataDirectory|\ContosoUniversity1.mdf ke string koneksi. Untuk informasi selengkapnya tentang string koneksi, lihat String Koneksi SQL Server untuk Aplikasi Web ASP.NET.

Anda tidak benar-benar memerlukan string koneksi dalam file Web.config. Jika Anda tidak menyediakan string koneksi, Entity Framework menggunakan string koneksi default berdasarkan kelas konteks Anda. Untuk informasi selengkapnya, lihat Kode Pertama ke Database Baru.

Membuat pengontrol dan tampilan

Sekarang Anda akan membuat halaman web untuk menampilkan data. Proses permintaan data secara otomatis memicu pembuatan database. Anda akan mulai dengan membuat pengontrol baru. Tetapi sebelum Anda melakukannya, bangun proyek untuk membuat model dan kelas konteks tersedia untuk perancah pengontrol MVC.

  1. Klik kanan folder Pengontrol di Penjelajah Solusi, pilih Tambahkan, lalu klik Item Perancah Baru.

  2. Dalam kotak dialog Tambahkan Perancah , pilih Pengontrol MVC 5 dengan tampilan, menggunakan Kerangka Kerja Entitas, lalu pilih Tambahkan.

    Menambahkan dialog Perancah di Visual Studio

  3. Dalam kotak dialog Tambahkan Pengontrol , buat pilihan berikut, lalu pilih Tambahkan:

    • Kelas model: Siswa (ContosoUniversity.Models). (Jika Anda tidak melihat opsi ini di daftar drop-down, buat proyek dan coba lagi.)

    • Kelas konteks data: SchoolContext (ContosoUniversity.DAL).

    • Nama pengontrol: StudentController (bukan StudentsController).

    • Biarkan nilai default untuk bidang lainnya.

      Saat Anda mengklik Tambahkan, perancah membuat file StudentController.cs dan sekumpulan tampilan (file.cshtml ) yang berfungsi dengan pengontrol. Di masa mendatang saat membuat proyek yang menggunakan Kerangka Kerja Entitas, Anda juga dapat memanfaatkan beberapa fungsionalitas tambahan perancah: membuat kelas model pertama Anda, jangan membuat string koneksi, lalu di kotak Tambahkan Pengontrol tentukan Konteks data baru dengan memilih tombol di + samping Kelas konteks data. Perancah akan membuat kelas Anda DbContext dan string koneksi Anda serta pengontrol dan tampilan.

  4. Visual Studio membuka file Controllers\StudentController.cs . Anda melihat bahwa variabel kelas telah dibuat yang membuat instans objek konteks database:

    private SchoolContext db = new SchoolContext();
    

    Metode Index tindakan mendapatkan daftar siswa dari entitas Siswa yang ditetapkan dengan membaca Students properti instans konteks database:

    public ViewResult Index()
    {
        return View(db.Students.ToList());
    }
    

    Tampilan Student\Index.cshtml menampilkan daftar ini dalam tabel:

    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.LastName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FirstMidName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.EnrollmentDate)
            </th>
            <th></th>
        </tr>
    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.LastName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FirstMidName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.EnrollmentDate)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
                @Html.ActionLink("Details", "Details", new { id=item.ID }) |
                @Html.ActionLink("Delete", "Delete", new { id=item.ID })
            </td>
        </tr>
    }
    
  5. Tekan Ctrl+F5 untuk menjalankan proyek. (Jika Anda mendapatkan kesalahan "Tidak dapat membuat Salinan Bayangan", tutup browser dan coba lagi.)

    Klik tab Siswa untuk melihat data pengujian yang Seed disisipkan metode. Bergantung pada seberapa sempit jendela browser Anda, Anda akan melihat tautan tab Siswa di bilah alamat atas atau Anda harus mengklik sudut kanan atas untuk melihat tautan.

    Tombol Menu

Menampilkan database

Ketika Anda menjalankan halaman Siswa dan aplikasi mencoba mengakses database, EF menemukan bahwa tidak ada database dan membuatnya. EF kemudian menjalankan metode seed untuk mengisi database dengan data.

Anda dapat menggunakan Server Explorer atau SQL Server Object Explorer (SSOX) untuk melihat database di Visual Studio. Untuk tutorial ini, Anda akan menggunakan Server Explorer.

  1. Tutup browser.

  2. Di Server Explorer, perluas Koneksi Data (Anda mungkin perlu memilih tombol refresh terlebih dahulu), memperluas Konteks Sekolah (ContosoUniversity), lalu perluas Tabel untuk melihat tabel di database baru Anda.

  3. Klik kanan tabel Siswa dan klik Perlihatkan Data Tabel untuk melihat kolom yang dibuat dan baris yang disisipkan ke dalam tabel.

  4. Tutup koneksi Server Explorer.

File database ContosoUniversity1.mdf dan .ldf berada di folder %USERPROFILE %.

Karena Anda menggunakan penginisialisasi DropCreateDatabaseIfModelChanges , Anda sekarang dapat membuat perubahan pada Student kelas, menjalankan aplikasi lagi, dan database akan secara otomatis dibuat ulang agar sesuai dengan perubahan Anda. Misalnya, jika Anda menambahkan EmailAddress properti ke Student kelas, jalankan halaman Siswa lagi, lalu lihat tabel lagi, Anda akan melihat kolom baru EmailAddress .

Konvensi

Jumlah kode yang harus Anda tulis agar Kerangka Kerja Entitas dapat membuat database lengkap untuk Anda minimal karena konvensi, atau asumsi yang dibuat Entity Framework. Beberapa dari mereka telah dicatat atau digunakan tanpa Anda menyadarinya:

  • Bentuk nama kelas entitas yang di-pluralisasi digunakan sebagai nama tabel.
  • Nama properti entitas digunakan untuk nama kolom.
  • Properti entitas yang diberi nama ID atau nama ID kelas dikenali sebagai properti kunci utama.
  • Properti ditafsirkan sebagai properti kunci asing jika <bernama nama properti navigasi nama>>< properti kunci utama (misalnya, StudentID untuk Student properti navigasi karena Student kunci utama entitas adalah ).ID Properti kunci asing juga dapat diberi nama properti kunci primer yang sama (<misalnya, EnrollmentID Enrollment karena kunci utama entitas adalah EnrollmentID).>

Anda telah melihat bahwa konvensi dapat ditimpa. Misalnya, Anda menentukan bahwa nama tabel tidak boleh di-pluralisasi, dan Anda akan melihat nanti cara menandai properti secara eksplisit sebagai properti kunci asing.

Mendapatkan kode

Unduh Proyek Yang Selesai

Sumber Daya Tambahan:

Untuk informasi selengkapnya tentang EF 6, lihat artikel berikut ini:

Langkah berikutnya

Di tutorial ini, Anda akan:

  • Membuat aplikasi web MVC
  • Menyiapkan gaya situs
  • Kerangka Kerja Entitas Terinstal 6
  • Membuat model data
  • Membuat konteks database
  • Inisialisasi DB dengan data pengujian
  • Menyiapkan EF 6 untuk menggunakan LocalDB
  • Pengontrol dan tampilan yang dibuat
  • Menampilkan database

Lanjutkan ke artikel berikutnya untuk mempelajari cara meninjau dan menyesuaikan kode buat, baca, perbarui, hapus (CRUD) di pengontrol dan tampilan Anda.