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

时间:2012-11-29 00:24:31

标签: entity-framework breeze

  

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

     

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

     

提前致谢。

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

3 个答案:

答案 0 :(得分: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”类型的上下文。

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

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

objCtx.ContextOptions.LazyLoadingEnabled = false;

如果'T'是DbContext,它会执行此操作:

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

答案 1 :(得分:1)

  

我下载了源代码并添加了一个构造函数   接受T实例的EFContextProvider能够使用   现有的ObjectContext / DbContext就像魅力一样。

马塞尔自己想出来并在我们的论坛上回答了他自己的问题。

答案 2 :(得分:1)

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

中找到