2

我们有一个使用实体框架 4.1 和 DbContext API 的应用程序。该应用程序有多个 DbContexts映射到不同的数据库和表。本周,我们使用Code first T4 模板为DbContext 预先生成了视图,以节省启动时间,一切都很棒......直到我们需要使用第二个 DbContext。那时,我们得到了以下异常:

“EntityContainer 'CodeFirstContainer' 的映射和元数​​据信息不再匹配用于创建预生成视图的信息。”

无论我们是否为一个或多个 DbContexts 生成了视图,我们都会得到该异常。

如何为多个 DbContexts 预生成视图并且仍然有一个工作的应用程序?

我查看了消息中可疑的“CodeFirstContainer”,发现它位于两个预生成视图构造函数中,如下所示:

public ViewsForBaseEntitySetsCE5A4DE7E067A5879A835C5C494F186A390ADC2D26E82631FDC17C61E7E3D076
{
    this.EdmEntityContainerName = "CodeFirstContainer";
    this.StoreEntityContainerName = "CodeFirstDatabase";
    this.HashOverMappingClosure = "198099ba4b299a8dc37402a5c4c65096d216c3ca5f3c1e6c796d33e723483d74";
    this.HashOverAllExtentViews = "85be433ad451c345f4d8e92827653fd9203be3008dd387745798f939514a0b2f";
    this.ViewCount = 14;
}

两个视图构造函数之间的唯一区别是最后 3 个属性。

或者,如果有人知道我如何告诉 EF 不要对两个 DbContexts 使用 CodeFirstContainer,那么我可以自己更改生成视图或 DbContext 并让事情正常工作......除非这包含在哈希中。

4

0 回答 0