सबसे पहले आप गलत कॉन्फ़िगरेशन कक्षाओं का उपयोग कर रहे हैं। डीबीकॉन्फ़िगरेशनटाइप को डीबीकॉन्फ़िगरेशन से विरासत में मिला एक प्रकार की आवश्यकता है न कि डीबीमाइग्रेशनकॉन्फ़िगरेशन<>।
DbMigrationsConfiguration वास्तव में केवल माइग्रेटर्स और डेटाबेस इनिशियलाइज़र के लिए उपयोग किया जाता है।
public class MyDbConfiguration : DbConfiguration
{
public MyDbConfiguration()
{
this.SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"));
this.SetProviderServices("System.Data.SqlServerCe.4.0", SqlCeProviderServices.Instance);
this.AddInterceptor(new NLogCommandInterceptor());// guardar logs
this.SetMigrationSqlGenerator("System.Data.SqlServerCe.4.0", () => new SqlCeMigrationSqlGenerator());
}
}
[DbConfigurationType(typeof(MyDbConfiguration))]
public class TestContext : DbContext
अफसोस की बात है कि यह संभव नहीं है इसलिए कई डीबी कॉन्फ़िगरेशन के साथ भी कई डिफॉल्टकनेक्शन फैक्ट्री सेट करें।
आपके मामले में आपको कनेक्शन स्ट्रिंग्स को app.config में स्टोर करना होगा और नाम को DbContext कंस्ट्रक्टर को पास करना होगा।
public class TestContext : DbContext
{
public TestContext()
: base("name=MyConnectionString")
{
}
app.config में MyConnectionString के प्रदाता नाम के आधार पर कनेक्शन को इनिशियलाइज़ किया जाएगा।
या यदि आप अपने app.config में कनेक्शन स्ट्रिंग नहीं चाहते हैं, तो बस पहले से ही आरंभ किए गए DbConnection को DbContext कंस्ट्रक्टर को पास करें
public class TestContext : DbContext
{
public TestContext()
: base(new SqlCeConnection(GetConnectionString()),true)
{
}
या यदि आप किसी विशिष्ट कनेक्शन को प्रारंभ नहीं करना चाहते हैं तो DbProviderFactory का उपयोग करें।
public class TestContext : DbContext
{
public TestContext()
: base(GetConnection(),true)
{
}
public static DbConnection GetConnection() {
var factory = DbProviderFactories.GetFactory("System.Data.SqlServerCe.4.0");
var connection = factory.CreateConnection();
connection.ConnectionString = "Data Source=C:/teste2.sdf;Persist Security Info=False;";
return connection;
}