使用带有Breeze EFContextProvider的动态连接字符串

Tin*_*ing 3 entity-framework breeze

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

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

提前致谢.

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

War*_*ard 6

您不必下载源代码并对其进行修改以实现这么简单.而现在,你将不必.

我们已经向GitHub推送了一个简单的更新EFContextProvider.此更改将显示在下一个Breeze Runtime版本中(> 0.81.2).

EFContextProvider用于创建"T"(你的ObjectContext /的DbContext)如下:

_context = new T();

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

protected virtual T CreateContext() {
    return new T();
}

覆盖并替换EFContextProvider子类中的那个,您将能够按照自己喜欢的方式创建"T"类型的上下文.

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

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

objCtx.ContextOptions.LazyLoadingEnabled = false;

如果'T'是a,DbContext它会这样做:

dbCtx.Configuration.ProxyCreationEnabled = false;
dbCtx.Configuration.LazyLoadingEnabled = false;