Bagaimana cara meneruskan string koneksi ke kerangka kerja entitas DbContext kode pertama? Pembuatan database saya berfungsi dengan benar ketika DbContext dan string koneksi di web.config berada dalam proyek yang sama dan diberi nama dengan cara yang sama. Tapi sekarang saya perlu memindahkan DbContext ke proyek lain jadi saya menguji meneruskan string koneksi ke sana sebagai berikut:
Model & Konteks
public class Dinner
{
public int DinnerId { get; set; }
public string Title { get; set; }
}
public class NerdDinners : DbContext
{
public NerdDinners(string connString)
: base(connString)
{
}
public DbSet<Dinner> Dinners { get; set; }
}
Tindakan
public ActionResult Index()
{
var db = new NerdDinners(ConfigurationManager.ConnectionStrings["NerdDinnerDb"].ConnectionString);
var dinners = (from d in db.Dinners
select d).ToList();
return View(dinners);
}
Web.Config
<connectionStrings>
<add name="NerdDinnerDb" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Jika saya menetapkan breakpoint dalam tindakan dan menganalisis db
, string koneksi ada di sana, tetapi tidak membuat atau menemukan database atau apa pun.
Terjadi kesalahan terkait jaringan atau contoh khusus saat membuat sambungan ke SQL Server. Server tidak ditemukan atau tidak dapat diakses. Verifikasi bahwa nama contoh sudah benar dan SQL Server dikonfigurasi untuk memungkinkan sambungan jarak jauh. (penyedia: Penyedia pipa bernama, kesalahan: 40 - tidak dapat membuka koneksi ke SQL Server)
sumber
Jawaban:
Sedikit terlambat untuk permainan di sini, tetapi opsi lainnya adalah:
public class NerdDinners : DbContext { public NerdDinners(string connString) { this.Database.Connection.ConnectionString = connString; } public DbSet<Dinner> Dinners { get; set; } }
sumber
Manual changes to this file will be overwritten if the code is regenerated.
dalam tajuk, maka seseorang mungkin ingin menerapkan ini dalam kelas parsial sesuai dengan Kelas dan Metode Parsial (Panduan Pemrograman C #)Setelah membaca dokumen, saya harus meneruskan nama string koneksi sebagai gantinya:
var db = new NerdDinners("NerdDinnerDb");
sumber
Pikir saya akan menambahkan bit ini untuk orang-orang yang datang mencari "Bagaimana cara melewatkan string koneksi ke DbContext": Anda dapat membuat string koneksi untuk datastore yang mendasari dan meneruskan seluruh string koneksi ke konstruktor tipe Anda yang berasal dari DbContext .
(Menggunakan kembali Kode dari @Lol Coder) Model & Konteks
public class Dinner { public int DinnerId { get; set; } public string Title { get; set; } } public class NerdDinners : DbContext { public NerdDinners(string connString) : base(connString) { } public DbSet<Dinner> Dinners { get; set; } }
Kemudian, katakanlah Anda membuat string Koneksi Sql menggunakan SqlConnectioStringBuilder seperti:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GetConnectionString());
Dimana metode GetConnectionString membangun string koneksi yang sesuai dan SqlConnectionStringBuilder memastikan string koneksi secara sintaks benar; Anda kemudian dapat membuat contoh db conetxt Anda seperti ini:
var myContext = new NerdDinners(builder.ToString());
sumber
public TestAppContext() : base("Data Source=server.company.com;Initial Catalog=SomeDB;Integrated Security=True") { }
Di DbContext Anda, buat konstruktor default untuk DbContext Anda dan warisi basis seperti ini:
public myDbContext() : base("MyConnectionString") // connectionstring name define in your web.config { }
sumber
MyConnectionString
... (ya, string koneksi ada). Saya harus meletakkanname=MyConnectionString
.Jika Anda sedang membangun string koneksi dalam aplikasi, maka Anda akan menggunakan perintah connString. Jika Anda menggunakan string koneksi di konfigurasi web. Kemudian Anda menggunakan "nama" dari string itu.
sumber
Saya punya sedikit contoh solusi untuk masalah itu.
MyDBContext.cs
public MyDBContext(DBConnectionType ConnectionType) //: base("ConnMain") { if(ConnectionType==DBConnectionType.MainConnection) { this.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnMain"].ConnectionString; } else if(ConnectionType==DBConnectionType.BackupConnection) { this.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnBackup"].ConnectionString; } }
MyClass.cs
public enum DBConnectionType { MainConnection=0, BackupConnection=1 }
frmMyForm.cs
MyDBContext db = new MyDBContext(DBConnectionType.MainConnection); //or //MyDBContext db = new MyDBContext(DBConnectionType.BackupConnection);
sumber
Periksa sintaks string koneksi Anda di web.config. Seharusnya seperti itu
ConnectionString="Data Source=C:\DataDictionary\NerdDinner.sdf"
sumber
Saat menggunakan model EF, saya memiliki string koneksi di setiap proyek yang menggunakan model EF. Misalnya, saya memiliki model EF EDMX di perpustakaan kelas yang terpisah. Saya memiliki satu string koneksi dalam proyek web (MVC) saya sehingga dapat mengakses EF db.
Saya juga memiliki proyek pengujian unit lain untuk menguji repositori. Agar repositori dapat mengakses EF db, file app.config proyek pengujian memiliki string koneksi yang sama.
Koneksi DB harus dikonfigurasi, bukan kode, IMO.
sumber
dari sini
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString); }
catatan yang mungkin perlu Anda tambahkan
Microsoft.EntityFrameworkCore.SqlServer
sumber
Tidak dapat melihat ada yang salah dengan kode Anda, saya menggunakan SqlExpress dan berfungsi dengan baik ketika saya menggunakan string koneksi di konstruktor.
Anda telah membuat folder App_Data di proyek Anda, bukan?
sumber
Bagi siapa saja yang datang ke sini mencoba mencari tahu cara mengatur string koneksi secara dinamis, dan mendapat masalah dengan solusi di atas (seperti "Format string inisialisasi tidak sesuai dengan spesifikasi mulai dari indeks 0.") saat menyiapkan string koneksi di konstruktor. Inilah cara memperbaikinya:
public static string ConnectionString { get { if (ConfigurationManager.AppSettings["DevelopmentEnvironment"] == "true") return ConfigurationManager.ConnectionStrings["LocalDb"].ConnectionString; else return ConfigurationManager.ConnectionStrings["ExternalDb"].ConnectionString; } } public ApplicationDbContext() : base(ConnectionString) { }
sumber