3

Я хотел бы использовать код EF сначала с SQL Server CE 4 из проекта ASP.NET MVC, но вместо моей базы данных, созданной в папке App_Data, я получаю новую базу данных в экземпляре SQL Server Express, установленном на моей рабочей станции.Как я могу заставить Entity Framework сначала использовать SQL Server CE при установке SQL Server Express?

Как я могу получить базу данных, созданную в папке App_Data?

web.config:

<connectionStrings> 
    <add name="NerdDinners" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" 
     providerName="System.Data.SqlServerCe.4.0"/> 
    </connectionStrings> 

Context класс:

public class NerdDinners : DbContext 
{ 
    public DbSet<Dinner> Dinners { get; set; } 
    public DbSet<RSVP> RSVPs { get; set; } 
} 

Edit 1
Я попытался остановить SQL Server Express, думая, что может заставить использовать SQL Server CE, но это привело к ProviderIncompatibleException с внутренним исключением

{"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)"}

Так что, похоже, моя установка хочет использовать SQL Server Express.

Edit 2 Было высказано предположение, что я явно передать имя строки подключения к DbContext поэтому я изменил свой контекст класс к следующему:

public class NerdDinners : DbContext 
    { 
     public NerdDinners() : base("NerdDinners") { } 

     public DbSet<Dinner> Dinners { get; set; } 
     public DbSet<RSVP> RSVPs { get; set; } 
    } 

В DinnersController, это как контекст инстанцировано:

public class DinnersController : Controller 
    { 
     private NerdDinners db = new NerdDinners(); 

     // 
     // GET: /Dinners/ 

     public ViewResult Index() 
     { 
      return View(db.Dinners.ToList()); 
     } 

После внесения этих изменений, БД по-прежнему создаются в SQL Server Express, так что кажется, что моя строка соединения игнорируется.

+0

у вас он настроен, как указано выше, и не получить файл sdf, отображаемый в bin/debug? –

+0

@ Adam Tuliper - Это правильно. Я получаю новую БД в моем локальном экземпляре SQL Server Express. – DaveB

+0

никаких других строк подключения вообще? Кроме того, установлен sqlce v 4? –

ответ

1

Есть два файла web.config в ASP.NET MVC. Строка соединения должна идти в том, что находится в корне сайта, а не в каталоге представлений (где у меня была моя). После того, как я установил строку подключения в web.config в корне проекта, моя база данных SQL Server CE была создана с использованием кода в первую очередь и работает нормально!

+0

даже не подумал, что вы бы добавили, что там, в основном, для настройки того, что разрешено только для ваших просмотров. что объяснило бы почему оно не нашло его !! :) –

0

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

Обеспечить соблюдение следующих правил. Если вы хотите отправить мне пример проекта, я проверю его для вас, но мои работы не будут указывать строку подключения и использовать sql ce. Загрузите мой демонстрационный проект по ссылке выше - это сработало? Если бы я не стал сомневаться в двоичных файлах CE.

Является ли ваш класс контекста в том же проекте? Является ли ваша строка со связью так же, как ваш класс контекста (это должно быть)

Другими словами, у вас есть web.config у вас есть NerdDinners, это ваш контекстный класс, фактически названный NerdDinners, если он не должен быть или изменить id в строке подключения.

Смежные вопросы