目前我有一个应用程序(web/silverlight),其中我的 ObjectContext 的连接字符串是动态的。它基于用户登录的方式,因为我的每个客户都有自己的数据库。即..用户名@域。我试图找到一种使用 EFContextProvider 的方法,即通过构造函数传递 ObjectContext,或者重写 GetConnectionString,遗憾的是两者都不支持。
有没有办法完成此操作,或者我可以在某处下载 EFContextProvider 的源代码,以便我自己实现它?
提前致谢。
这个问题是由 Marcel 在我们的 IdeaBlade 论坛上发布的。我在这里重新发布问题和答案,因为我认为这对 Breeze Stack Overflow 社区很有用。
您不必为了如此简单的事情而下载源代码并对其进行修改。和现在你不必.
我们已向 GitHub 推送了一个简单的更新EFContextProvider
。此更改将出现在下一个 Breeze Runtime 版本 (> 0.81.2) 中。
Where 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”是DbContext
它会这样做:
dbCtx.Configuration.ProxyCreationEnabled = false;
dbCtx.Configuration.LazyLoadingEnabled = false;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)