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.
Artikel ini membahas bagaimana Entity Framework menemukan koneksi database mana yang akan digunakan, dan cara mengubahnya. Model yang dibuat dengan Code First dan EF Designer tercakup.
Peringatan
Artikel ini menggunakan database lokal yang tidak mengharuskan pengguna untuk diautentikasi. Aplikasi produksi harus menggunakan alur autentikasi paling aman yang tersedia. Untuk informasi selengkapnya tentang autentikasi untuk aplikasi pengujian dan produksi yang disebarkan, lihat Mengamankan alur autentikasi.
Biasanya aplikasi Entity Framework menggunakan kelas yang berasal dari DbContext. Kelas turunan ini memanggil salah satu konstruktor di kelas DbContext dasar untuk mengontrol:
- Bagaimana konteks tersambung ke database, yaitu bagaimana string koneksi ditemukan dan digunakan.
- Apakah konteks menghitung model menggunakan Code First atau memuat model yang dibuat dengan EF Designer.
- Opsi tingkat lanjut tambahan
Fragmen berikut menunjukkan beberapa cara konstruktor DbContext dapat digunakan.
Gunakan Kode Pertama dengan koneksi menurut konvensi
Jika Anda belum melakukan konfigurasi lain dalam aplikasi Anda, maka memanggil konstruktor tanpa parameter di DbContext akan menyebabkan DbContext berjalan dalam mode Kode Pertama dengan koneksi database yang dibuat oleh konvensi. Contohnya:
namespace Demo.EF
{
public class BloggingContext : DbContext
{
public BloggingContext()
// C# will call base class parameterless constructor by default
{
}
}
}
Dalam contoh ini DbContext menggunakan nama ruang nama yang memenuhi syarat dari kelas konteks turunan Anda—Demo.EF.BloggingContext—sebagai nama database dan membuat string koneksi untuk database ini menggunakan SQL Express atau LocalDB. Jika keduanya diinstal, SQL Express akan digunakan.
Visual Studio 2010 menyertakan SQL Express secara default dan Visual Studio 2012 dan yang lebih baru menyertakan LocalDB. Selama penginstalan, paket EntityFramework NuGet memeriksa server database mana yang tersedia. Paket NuGet kemudian akan memperbarui file konfigurasi dengan mengatur server database default yang digunakan Code First saat membuat koneksi menurut konvensi. Jika SQL Express berjalan, SQL Express akan digunakan. Jika SQL Express tidak tersedia, maka LocalDB akan didaftarkan sebagai default sebagai gantinya. Tidak ada perubahan yang dilakukan pada file konfigurasi jika sudah berisi pengaturan untuk pabrik koneksi default.
Gunakan Kode Pertama dengan koneksi menurut konvensi dan nama database yang ditentukan
Jika Anda belum melakukan konfigurasi lain dalam aplikasi Anda, maka memanggil konstruktor string di DbContext dengan nama database yang ingin Anda gunakan akan menyebabkan DbContext berjalan dalam mode Kode Pertama dengan koneksi database yang dibuat oleh konvensi ke database nama tersebut. Contohnya:
public class BloggingContext : DbContext
{
public BloggingContext()
: base("BloggingDatabase")
{
}
}
Dalam contoh ini DbContext menggunakan "BloggingDatabase" sebagai nama database dan membuat string koneksi untuk database ini menggunakan SQL Express (diinstal dengan Visual Studio 2010) atau LocalDB (diinstal dengan Visual Studio 2012). Jika keduanya diinstal, SQL Express akan digunakan.
Gunakan Code First dengan string koneksi dalam file app.config/web.config
Anda dapat memilih untuk menempatkan string koneksi di file app.config atau web.config Anda. Contohnya:
<configuration>
<connectionStrings>
<add name="BloggingCompactDatabase"
providerName="System.Data.SqlServerCe.4.0"
connectionString="Data Source=Blogging.sdf"/>
</connectionStrings>
</configuration>
Ini adalah cara mudah untuk memberi tahu DbContext untuk menggunakan server database selain SQL Express atau LocalDB — contoh di atas menentukan database SQL Server Compact Edition.
Jika nama string koneksi cocok dengan nama konteks Anda (baik dengan atau tanpa kualifikasi namespace) maka itu akan ditemukan oleh DbContext ketika konstruktor tanpa parameter digunakan. Jika nama string koneksi berbeda dari nama konteks Anda, Maka Anda dapat memberi tahu DbContext untuk menggunakan koneksi ini dalam mode Kode Pertama dengan meneruskan nama string koneksi ke konstruktor DbContext. Contohnya:
public class BloggingContext : DbContext
{
public BloggingContext()
: base("BloggingCompactDatabase")
{
}
}
Atau, Anda dapat menggunakan formulir "name=<string koneksi name>" untuk string yang diteruskan ke konstruktor DbContext. Contohnya:
public class BloggingContext : DbContext
{
public BloggingContext()
: base("name=BloggingCompactDatabase")
{
}
}
Formulir ini membuatnya eksplisit bahwa Anda mengharapkan string koneksi ditemukan dalam file konfigurasi Anda. Pengecualian akan dilemparkan jika string koneksi dengan nama yang diberikan tidak ditemukan.
Database/Model Pertama dengan string koneksi dalam file app.config/web.config
Model yang dibuat dengan EF Designer berbeda dari Code First karena model Anda sudah ada dan tidak dihasilkan dari kode saat aplikasi berjalan. Model biasanya ada sebagai file EDMX di proyek Anda.
Perancang akan menambahkan string koneksi EF ke file app.config atau web.config Anda. String koneksi ini khusus karena berisi informasi tentang cara menemukan informasi dalam file EDMX Anda. Contohnya:
<configuration>
<connectionStrings>
<add name="Northwind_Entities"
connectionString="metadata=res://*/Northwind.csdl|
res://*/Northwind.ssdl|
res://*/Northwind.msl;
provider=System.Data.SqlClient;
provider connection string=
"Data Source=.\sqlexpress;
Initial Catalog=Northwind;
Integrated Security=True;
MultipleActiveResultSets=True""
providerName="System.Data.EntityClient"/>
</connectionStrings>
</configuration>
EF Designer juga akan menghasilkan kode yang memberi tahu DbContext untuk menggunakan koneksi ini dengan meneruskan nama string koneksi ke konstruktor DbContext. Contohnya:
public class NorthwindContext : DbContext
{
public NorthwindContext()
: base("name=Northwind_Entities")
{
}
}
DbContext tahu untuk memuat model yang ada (daripada menggunakan Kode Pertama untuk menghitungnya dari kode) karena string koneksi adalah string koneksi EF yang berisi detail model yang akan digunakan.
Opsi konstruktor DbContext lainnya
Kelas DbContext berisi konstruktor lain dan pola penggunaan yang memungkinkan beberapa skenario yang lebih canggih. Beberapa di antaranya adalah:
- Anda dapat menggunakan kelas DbModelBuilder untuk membangun model Code First tanpa membuat instans DbContext. Hasil dari ini adalah objek DbModel. Anda kemudian dapat meneruskan objek DbModel ini ke salah satu konstruktor DbContext ketika Anda siap untuk membuat instans DbContext Anda.
- Anda dapat meneruskan string koneksi penuh ke DbContext, bukan hanya database atau nama string koneksi. Secara default string koneksi ini digunakan dengan penyedia System.Data.SqlClient; ini dapat diubah dengan mengatur implementasi IConnectionFactory yang berbeda ke konteks. Database.DefaultConnectionFactory.
- Anda dapat menggunakan objek DbConnection yang ada dengan meneruskannya ke konstruktor DbContext. Jika objek koneksi adalah instans EntityConnection, model yang ditentukan dalam koneksi akan digunakan daripada menghitung model menggunakan Kode Pertama. Jika objek adalah instans dari beberapa jenis lain—misalnya, SqlConnection—maka konteks akan menggunakannya untuk mode Code First.
- Anda dapat meneruskan ObjectContext yang ada ke konstruktor DbContext untuk membuat DbContext yang membungkus konteks yang ada. Ini dapat digunakan untuk aplikasi yang ada yang menggunakan ObjectContext tetapi yang ingin memanfaatkan DbContext di beberapa bagian aplikasi.