Публикация с несколькими контекстами в одной базе данных


person bahadir arslan    schedule 02.06.2014    source источник
comment
Это точно отвечает на ваш вопрос.   -  person Shishdem    schedule 02.06.2014
comment
@Shishdem, к сожалению, нет. я разделил свой dbcontext после этой статьи, но он не содержит части веб-развертывания. Моя проблема связана с мастером веб-развертывания (публикации)   -  person bahadir arslan    schedule 02.06.2014


Ответы (4)


Я не смог воспроизвести эту проблему. Вот шаги, которые я использовал (используя Visual Studio 2013 Update 2).

Создайте новое приложение MVC. Добавьте в проект следующие модели (две отдельные модели/контексты Code First).

public class CustomerContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }
}

public class Customer
{
    public int CustomerId { get; set; }
    public string Name { get; set; }
}

public class ProductContext : DbContext
{
    public DbSet<Product> Products { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

Затем включите миграцию, добавьте миграцию и обновите локальную базу данных для обоих контекстов, используя следующие команды.

 Enable-Migrations -ContextTypeName CustomerContext -MigrationsDirectory Migrations\Customer
 Enable-Migrations -ContextTypeName ProductContext -MigrationsDirectory Migrations\Product
 Add-Migration FirstMigration -ConfigurationTypeName MyWebApp.Migrations.Customer.Configuration
 Add-Migration FirstMigration -ConfigurationTypeName MyWebApp.Migrations.Product.Configuration
 Update-Database -ConfigurationTypeName MyWebApp.Migrations.Customer.Configuration
 Update-Database -ConfigurationTypeName MyWebApp.Migrations.Product.Configuration

Затем, когда я щелкаю правой кнопкой мыши -> Опубликовать проект, я получаю возможность включить миграцию в App_Start для обоих моих контекстов (а также для контекста удостоверения ASP.NET). Если я правильно понимаю, вы не видите свой дополнительный контекст(ы) на этом экране.

Скриншот экрана публикации

person Rowan Miller    schedule 16.06.2014
comment
да, я хочу это, но я не мог видеть свои контексты. Я проверю свои шаги относительно ваших как можно скорее и напишу результат здесь. Спасибо за ответ. - person bahadir arslan; 17.06.2014
comment
Вам когда-нибудь удавалось это решить? Я также вижу только один контекст в этом диалоге. - person Nikhil; 23.02.2016

Я видел, как это происходит, когда несколько DbContext используют общую строку подключения. Под этим я подразумеваю:

public class Context1: DbContext
{
 public Context1()
   : this("DefaultConnection")
 {}
 public Context1: (string connectionString)
   : base(connectionString)
 {}

 ....
}

public class Context2: DbContext
{
 public Context2()
   : this("DefaultConnection")
 {}
 public Context2: (string connectionString) 
   : base(connectionString)
 {}

 ...
}

Когда вы публикуете, только один DbContext будет отображаться в разделе «Настройки»> «Базы данных». Если вы измените «DefaultConnection» на что-то другое, вы увидите отдельные DbContexts. Как это:

public class Context1: DbContext
{
 public Context1()
   : this("DefaultConnection")
 {}
 public Context1: (string connectionString)
   : base(connectionString)
 {}

 ....
}

public class Context2: DbContext
{
 public Context2()
   : this("DefaultConnection2")
 {}
 public Context2: (string connectionString) 
   : base(connectionString)
 {}

 ...
}

Возможно, это объясняет поведение, которое вы видите.

person Caleb Van Dyke    schedule 12.08.2014

Если оба dbContexts используют одну и ту же базу данных (и, следовательно, одну и ту же строку подключения к базе данных в web.config), как мы можем заставить Web Deploy показать их оба? Нужно ли мне создавать отдельную (дублирующуюся) строку подключения, указывающую на ту же базу данных, только для того, чтобы она отображалась в виде отдельного контекста в мастере?

person Cindy K.    schedule 09.02.2015

Если вы хотите увидеть все контексты в диалоговом окне «Публикация», вам нужно добавить другие строки подключения в web.config. Они должны иметь другое имя и ссылаться на них из вашего контекста (имя в конструкторе).

person gurbi    schedule 12.04.2016