我正在阅读 Julia Lerman 和 Rowan Miller 所著的“Programming Entity Framework: DbContext”一书。
我已经从http://www.thedatafarm.com/learnentityframework/downloadfiles/dbcontext/StartingSolution.zip下载了“BAGA”解决方案。我觉得这里是一个完整的工具,因为我无法让任何代码示例在我的计算机上运行。
通常,当我使用实体框架时,我的配置中有一个连接字符串,它告诉实体框架要连接到什么数据库以及要使用什么凭据。
但是,在这个 BAGA 解决方案中,我在解决方案的任何地方都找不到连接字符串或对数据库的引用。我猜代码应该全部在本地或类似的地方运行,但是当我输入并运行任何示例查询或更新时,计算机会暂停大约 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; }
}
}
正如您在此处看到的,没有指定构造函数。