2013-05-29 3 views
4

Я читаю книгу «Программирование сущности: DbContext», Джулия Лерман и Роуэн Миллер.Как получить примеры «Программирование Entity Framework: DbContext»?

Я загрузил решение «BAGA» от http://www.thedatafarm.com/learnentityframework/downloadfiles/dbcontext/StartingSolution.zip. Я чувствую себя полным инструментом здесь, потому что я не могу получить какие-либо образцы кода для запуска на моем компьютере.

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

Однако в этом решении BAGA я не могу найти строку подключения или ссылку на базу данных в любом месте решения. Я предполагаю, что код должен выполняться локально или somesuch, но когда я ввожу и запускаю любой из выборочных запросов или обновлений, компьютер приостанавливается на 20 секунд, а затем генерируется следующее исключение из метода SaveChanges: «Поставщик не вернул строку ProviderManifestToken».

Я предполагаю, что это решение должно либо использовать внутреннюю базу данных, либо я должен набирать строку соединения где-то, но я не вижу, где в книге он рассказывает мне, как сделать это решение Работа.

В нем четко указано, что решение использует EF Code First.

консоль код приложения в BAGA выглядит следующим образом:

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Text; 
using DataAccess; 
using Model; 

namespace BreakAwayConsole 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     Database.SetInitializer(new InitializeBagaDatabaseWithSeedData()); 

     // Call the latest example method here 

     // NOTE: Some examples will change data in the database. Ensure that you only call the 
     //  latest example method. The InitializeBagaDatabaseWithSeedData database initializer 
     //  (registered above) will take care of resetting the database before each run. 

     AddMachuPicchu(); 

    } 

    // Add example methods here 

    private static void AddMachuPicchu() 
    { 
     using (var context = new BreakAwayContext()) 
     { 
      var machuPicchu = new Destination 
      { 
       Name = "Machu Picchu", 
       Country = "Peru" 
      }; 
      context.Destinations.Add(machuPicchu); 
      context.SaveChanges(); 
     }  
    }  
    } 
} 

Как спросил @Wyktor Zychla, вот код BreakAwayContext.cs:

using System.Data.Entity; 
using Model; 

namespace DataAccess 
{ 
    public class BreakAwayContext : DbContext 
    { 
    public DbSet<Destination> Destinations { get; set; } 
    public DbSet<Lodging> Lodgings { get; set; } 
    public DbSet<Trip> Trips { get; set; } 
    public DbSet<Person> People { get; set; } 
    public DbSet<Reservation> Reservations { get; set; } 
    public DbSet<Payment> Payments { get; set; } 
    public DbSet<Activity> Activities { get; set; } 
    } 
} 

Как вы можете видеть здесь, там не указан конструктор.

ответ

0

Это должно быть просто. Найдите код с типом BreakAwayContext и найдите его конструкторы. Либо они предоставляют явную строку соединения, либо используют имя строки подключения.

В обоих случаях вы можете легко создать соответствующую базу данных.

+0

Я добавил код для 'BreakAwayContext'. Объявление конструктора объявлено, поэтому, где бы я поместил строку соединения? –

+0

Если конструктор отсутствует, EF ищет строку соединения формы: name = "DataAccess.BreakAwayContext" connectionString = "yourconnectionstringgorshere" provider = "System.Data.SqlClient" в разделе connectionstrings файла конфигурации по умолчанию. –

+0

Спасибо. Я попробую это, когда вернусь завтра. –

1

Обнаружено решение в другом месте, и я добавляю его здесь для тех, у кого такая же проблема, когда они покупают книги. Для реализации этого добавьте строку подключения в файл App.config в проекте BreakAwayConsole:

<connectionStrings> 
    <add name="BreakAwayContext" 
     providerName="System.Data.SqlClient" 
     connectionString="Server=localhost;Database=Baga;Integrated Security=True;"/> 
    </connectionStrings> 

и в методе BreakAwayConsole Program.cs Main():

Database.SetInitializer(new InitializeBagaDatabaseWithSeedData()); 
var ctx = new BreakAwayContext(); 
ctx.Database.Initialize(true); 

Смотрите эту нить, которая при условии вышеприведенное решение: Entity Framework Database.SetInitializer simply not working

+0

Вам не нужно инициализировать, потому что ваш код вызывает SaveChanges, это приведет к инициализации семени. Вы только хотите использовать Initialize, если вы не собираетесь писать что-либо в базу данных сразу. –

+0

Нужно только добавить в app.config, и образец решения просто работает.Не нужно вызывать Database.initialize. –

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