gpt4 book ai didi

c# - 具有不同数据库、实体类型和 dbcontext 的通用存储库

转载 作者:行者123 更新时间:2023-12-03 01:52:51 28 4
gpt4 key购买 nike

我已经按照这个易于遵循的指南为我的 ASP.NET Web API 项目实现了一个简单的通用存储库:

http://www.dataworks.ie/blog/entity_framework_5_with_automapper_and_repository_pattern

效果很好。

但是,我正在开发的解决方案有两个具有相同架构的简单数据库 - 用于测试/开发并在本地(和离线)运行时使用的 SQL Server CE,以及​​在线运行时使用的 SQL Azure。两者都在单独的程序集中创建了 EF 层。我通过上下文类的构造函数中的 web.config 连接字符串切换 DbContext。问题出在我的 Controller 代码上。

例如如果使用 Azure 我会有

public ActionResult Index()
{
IGenericRepository<MyProj.Data.SqlAzure.User> userRepo = new GenericRepository<MyProj.Data.SqlAzure.User>();

如果我使用 SQL Server CE,我就会

public ActionResult Index()
{
IGenericRepository<MyProj.Data.SqlCe.User> userRepo = new GenericRepository<MyProj.Data.SqlCe.User>();

因此,当我切换数据库时,我必须手动更改为正确的程序集命名空间以引用我的实体。

抱歉,如果这已经完成了,因为有一段时间没有做过其中之一,但是对于这种情况,最好/优雅的解决方案是什么?上面那张看起来很脏。此外,我的所有通用存储库代码当前都位于与 Web 应用程序相同的命名空间中的模型文件夹中。

最佳答案

想到的唯一解决方案是使用工厂类来创建带有配置文件中定义的开关的实例,例如

public DbRepositoryFactory
{
public IGenericRepository<User> GetUserRepository()
{
return ConfigurationManager.AppSettings["DbSwitch"].Equals("Azure")
? new GenericRepository<MyProj.Data.SqlAzure.User>()
: new GenericRepository<MyProj.Data.SqlCe.User>()
}
}

要么使用反射,要么使用反射。

关于c# - 具有不同数据库、实体类型和 dbcontext 的通用存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32374772/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com