Это мой первый вопрос, и я знаю, что должен искать, прежде чем что-то задавать, я уверен, что я выполнил поиск, но не нашел нужной информации.
Я использую подход, основанный на коде, чтобыреализовать мой контекст и мои модели, поэтому у меня есть простой контекст, как:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public partial class MultipleContext : DbContext
{
public MariaDBContext(string connection) : base(connection)
{
//Database.SetInitializer<MultipleDBContext>(new MariaDbInitializer());
}
public virtual DbSet<Test> Tests { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Test>().ToTable("test")
.HasKey(e => e.ID);
}
}
и моя модель:
public partial class Test
{
public int ID { get; set; }
public string Name { get; set; }
public string Family { get; set; }
}
, и у меня есть два connectionstrings
, как показано ниже:
<connectionStrings>
<add name="MariaDBContext" connectionString="server=127.0.0.1;user id=root;password=xx;database=sb1" providerName="MySql.Data.MySqlClient" />
<add name="SqlDBContext" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=db1" providerName="System.Data.SqlClient" />
</connectionStrings>
и мой EF config:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</providers>
</entityFramework>
Я хочу записать в другой Db, просто изменив ConnectionString
, например:
MultipleDBContext context = new MultipleDBContext(System.Configuration.ConfigurationManager.ConnectionStrings["MariaDBContext"].ToString());
var xx = context.Tests.Where(x => x.ID > 0).ToList();
context.Tests.Add(new Test()
{
Name = "name",
Family = ""
});
context.SaveChanges();
xx = context.Tests.Where(x => x.ID > 0).ToList();
//Use sql connection
MultipleDBContext sqlContext = new MultipleDBContext (System.Configuration.ConfigurationManager.ConnectionStrings["SqlDBContext"].ToString());
var sqlTest = sqlContext.Tests.Where(x => x.ID > 0).ToList();
sqlContext.Tests.Add(new Test()
{
Name = "name_" + DateTime.Now.Ticks.ToString(),
Family = "family_" + DateTime.Now.Ticks.ToString(),
});
sqlContext.SaveChanges();
sqlTest = sqlContext.Tests.Where(x => x.ID > 0).ToList();
, первые context
работаютхорошо, но sqlcontext
получает следующее исключение:
Произошло необработанное исключение типа 'System.NullReferenceException' в EntityFramework.dll Дополнительная информация: ссылка на объект не установлена для экземпляра объекта
, но если я удаляю украшение DbConfigurationType
, то второе sqlContext
работает нормально, первое дает следующее исключение:
Необработанное исключение типа 'System.Data.SqlClient.SqlException 'произошло в EntityFramework.dll Дополнительная информация: Ошибка входа для пользователя 'root'.
Я знаю, что это из-за DbConfigurationType
, который может быть определен при запуске приложения или украшен на Context
или определен в файле конфигурации...
но как я могу получить это (несколько connectionstrings
и один контекст)?