3

目前我有一个应用程序(web/silverlight),其中我的 ObjectContext 的连接字符串是动态的。它基于用户的登录方式,因为我的每个客户都有自己的数据库。即..用户名@域。我正在尝试找到一种使用 EFContextProvider 的方法,即通过构造函数传递 ObjectContext 或覆盖 GetConnectionString,遗憾的是两者都不支持。

有没有办法做到这一点,或者我可以在某处下载 EFContextProvider 的源代码,以便我自己实现它?

提前致谢。

这个问题由 Marcel 在我们的 IdeaBlade 论坛上发布。我在这里重新发布问题和答案,因为我认为它对 Breeze Stack Overflow 社区很有用。

4

3 回答 3

6

您不必为了这么简单的事情下载源代码并对其进行修改。现在你不必这样做了

我们已经向 GitHub 推送了对EFContextProvider. 此更改将出现在下一个 Breeze Runtime 版本 (> 0.81.2) 中。

用于创建“T”(您的 ObjectContext/ DbContext EFContextProvider)的位置如下:

_context = 新 T();

它现在调用一个虚拟方法,T CreateContext()它的默认实现是:

受保护的虚拟 T CreateContext() {
    返回新的 T();
}

在您的子类中覆盖并替换它,EFContextProvider您将能够按照您喜欢的方式创建类型为“T”的上下文。

注意:基础EFContextProvider仍然会做一些创建后的配置,以确保它的行为符合我们的预期;我们不希望上下文进行任何延迟加载或创建代理。

因此,如果 'T' 是ObjectContext,则提供者将执行以下操作:

objCtx.ContextOptions.LazyLoadingEnabled = false;

如果 'T' 是 aDbContext它会这样做:

dbCtx.Configuration.ProxyCreationEnabled = 假;
dbCtx.Configuration.LazyLoadingEnabled = 假;
于 2013-01-05T01:22:29.017 回答
1

我下载了源代码并向 EFContextProvider 添加了一个构造函数,该构造函数接受一个 T 的实例,以便能够使用现有的 ObjectContext/DbContext,它的工作原理就像一个魅力。

Marcel 自己想通了,并在我们的论坛上回答了他自己的问题。

于 2012-11-29T00:24:30.547 回答
1

Ward 提到的 CreateContext 虚拟方法现在在 v 0.83.2 中可用

于 2013-01-06T07:45:37.580 回答