我刚刚升级到EF Code First CTP4,看起来ContextBuilder类被移除了。我现在这样创建我的ObjectContext (在CTP3中):
var contextBuilder = new ContextBuilder<ObjectContext>();
var connstr = ConfigurationManager.ConnectionStrings["MyConn"];
var connection = new SqlConnection(connstr.ConnectionString);
var ctx = contextBuilder.Create(connection);我不想像他们的许多例子那样创建一个从ObjectContext派生的硬编码类。有人知道如何在新版本中做到这一点吗?
发布于 2010-07-16 01:36:05
下面是修改后的方法,应该这样做:
var modelBuilder = new ModelBuilder();
var dbModel = modelBuilder.CreateModel();
var ctx = dbModel.CreateObjectContext<ObjectContext>(connection);注意,您只想在每个应用程序中调用CreateModel一次。
发布于 2010-07-15 23:59:23
我相信在最新的CTP中,ConntextBuilder被ModelBuilder取代了。新的构建器与其前身的功能不同,因此您可能希望在此处阅读它:
http://blogs.msdn.com/b/adonet/archive/2010/07/14/ctp4codefirstwalkthrough.aspx
发布于 2010-07-16 02:29:41
来自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也是应该在整个应用程序中缓存的单元。
https://stackoverflow.com/questions/3257361
复制相似问题