【发布时间】:2018-06-05 10:38:24
【问题描述】:
我正在尝试在 C# Webapi 项目中创建一个通用函数,以根据输入标志的值连接到两个数据库之一。每个数据库具有相同的结构,但不同的数据和每次调用将始终使用相同的数据库。
我的其余代码与数据库无关,因此它需要能够使用通用 db 对象,而不是每次调用数据库时都做出决定。
这是我认为可以解决问题的代码:
public static dynamic GetDb(string scope = "dev") {
dynamic db;
if (Globals.db == null) {
switch (scope.ToLower()) {
case "tns":
db = new TnsDb();
break;
case "sng":
db = new SngDb();
break;
default:
db = new TnsDb();
break;
}
Globals.db = db;
} else {
db = Globals.db;
}
return db;
}
我正在使用实体框架,它为我连接到项目的每个数据库创建了一个访问类,并为我需要访问的每个存储过程包含了一个方法。我想做的是让这个通用方法返回一个表示适当数据库类的对象。
我遇到的问题是该方法没有返回可用的对象。我尝试过使用动态的返回类型(如上)、普通对象和 DbContext(实体框架 db 类的父类)以及其他一些出于绝望的东西,但每次调用语句都会收到一个对象实体框架数据库类中没有任何方法。
任何关于如何动态选择和返回保留所有方法的适当对象的想法都将不胜感激,因为我至少可以节省一些头发。
【问题讨论】:
-
我建议使用存储库模式,它在 db A => web Api 域或 db B 和 webApi 域之间映射。您可以使用 AutoMapper 映射您的域对象。
-
泛型也很有用
-
如果数据库相同,那么 DbContext 不就是相同的,只有一个其他连接字符串吗? ...如果不是的话:考虑一个通用接口。
-
@developer 我是 C# 新手,所以我不确定你指的是什么。你能解释一下存储库模式吗?任何代码示例也将不胜感激。
-
@bradbury9 我是 C# 新手,所以我不确定您指的是什么。你能解释一下泛型是什么吗?任何代码示例也将不胜感激。
标签: c# database entity-framework asp.net-web-api2