2

作为我们打算从 Linq2Sql 迁移到实体框架的一部分,我们创建了一个由十个实体组成的小型 EF 模型。因为我们使用的是遗留应用程序,所以我们使用“代码优先”选项并将我们的 POCO 对象手动映射到数据库中的表。 我们不希望实体框架代码更新数据库。 我相信以下是实现这一目标所需要做的全部 - 我希望得到确认,因为我不确定 SetInitializer 代码是否应该放在此处或是否应该放在 Global.asax 代码中。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer<InboxDataContext>(null);

    modelBuilder.Configurations.Add(new Subscribers.Mapping.DataSourceMap());
    modelBuilder.Configurations.Add(new Subscribers.Mapping.SubscriberMap());
    ...
}

作为此次更新的一部分,我们创建了一个小型测试页面(MVC 控制器和视图)并将其添加到我们的主应用程序项目中。在开发和测试期间,这运行良好。我们唯一注意到的是,如果我们更新了底层 EF 模型,初始页面加载似乎需要几分钟才能呈现。我认为这是因为 EF 必须重建其视图和映射以反映更改 - 让我感到耻辱的是,我并没有太担心这一点,因为 a)我不完全了解它的工作原理和 b)它似乎只发生在模型更改上。

今天早上,我们将此更新加载到生产服务器进行初始测试,这一次初始加载问题变得更糟 - 事实上测试页面从未加载过。

所以,要回答我的问题:

  1. 还有什么我应该/不应该做的事情来准备我的生产申请吗?
  2. 如何提高初始加载性能?
  3. 如何找出为什么生产服务器上的初始加载永远不会完成 - 我没有看到任何错误消息?

我确实尝试下载 Entity Framework Power Tools 并在派生的 DbContext 类上运行“生成视图”选项,但由于我只能在开发环境中运行它,所以我不确定它在复制到生产服务器时是否有效 - 它似乎没有。

我应该提到,开发环境在主表中仅包含一百条记录,而生产环境包含近一百万条记录(相同的模式),我再次不确定这是否会有所不同。

任何帮助建议将不胜感激。

谢谢。

4

1 回答 1

1

首先,如果您使用的是现有数据库,那么更好的方法是 Model First。您可以将您的 Edmx 连接到您当前的数据库,它会收集所有需要的映射,就像它们当前一样。然后它还会生成 POCO 类和 DbContext(使用 EF5,您必须在 <5 中手动完成)。使用这种方法可以减少初始化时间,因为您的代码不必在运行时创建模型。

试试看,它可能会解决你所有的问题(我相信它们都是相关的)。

于 2012-10-24T14:24:05.070 回答