在EF Code First CTP4中构建ObjectContext

时间:2010-07-15 15:53:12

标签: c# .net entity-framework orm entity-framework-4

我刚刚升级到EF Code First CTP 4,看起来像ContextBuilder类被删除了。我目前正在创建我的ObjectContext(在CTP 3中):

var contextBuilder = new ContextBuilder<ObjectContext>();
var connstr = ConfigurationManager.ConnectionStrings["MyConn"];
var connection = new SqlConnection(connstr.ConnectionString);
var ctx = contextBuilder.Create(connection);

我不想创建一个从ObjectContext派生的硬编码类,就像他们的许多示例似乎一样。有人知道如何在新版本中执行此操作吗?

3 个答案:

答案 0 :(得分:5)

以下是应该修改的修改方式:

var modelBuilder = new ModelBuilder();
var dbModel = modelBuilder.CreateModel();
var ctx = dbModel.CreateObjectContext<ObjectContext>(connection);

请注意,您只想为每个应用程序调用一次CreateModel。

答案 1 :(得分:3)

我认为ConntextBuilder已在最新的CTP中被ModelBuilder取代。新构建器的功能与其前一个构建器不同,因此您可能需要在此处阅读:

http://blogs.msdn.com/b/adonet/archive/2010/07/14/ctp4codefirstwalkthrough.aspx

答案 2 :(得分:2)

来自CTP3的ContextBuilder还会自动发现您在ObjectSet属性中公开的实体类型,您仍然可以通过调用ModelBuilder.DiscoverEntitiesFromContext方法来执行此操作。

var builder = new ModelBuilder();
builder.DiscoverEntitiesFromContext(typeof(MyContext));
var model = builder.CreateModel();
var context = model.CreateObjectContext<MyContext>(connection);

显然,这种拆分为上下文创建过程增加了一个额外的步骤,其背后的动机是DbModel(或类似的类型)将成为未来EF中模型的主要表示,并将成为其他的输出ModelBuilder之外的模型创建选项。 DbModel也是应该在整个应用程序中缓存的单元。