Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 最佳实践WebAPI和多个数据库_Asp.net Web Api_Solid Principles - Fatal编程技术网

Asp.net web api 最佳实践WebAPI和多个数据库

Asp.net web api 最佳实践WebAPI和多个数据库,asp.net-web-api,solid-principles,Asp.net Web Api,Solid Principles,我有个问题。我正在用ASP.NETMVC创建一个webAPI,我有三个不同的项目和三个独立的数据库 我有一个在一个表中插入的方法。该表存在于三个数据库中 客户机以字符串形式向我发送项目 我的问题是: 1-我应该将webAPI划分为三个不同的URL吗? 2-我不想以这种方式在控制器中创建交换机或if elseif: switch (project) { case project1: objectdatabase1 case project2: objectdatabase2 c

我有个问题。我正在用ASP.NETMVC创建一个webAPI,我有三个不同的项目和三个独立的数据库

我有一个在一个表中插入的方法。该表存在于三个数据库中

客户机以字符串形式向我发送项目

我的问题是:

1-我应该将webAPI划分为三个不同的URL吗? 2-我不想以这种方式在控制器中创建交换机或if elseif:

switch (project) {
case project1:
     objectdatabase1
case project2:
     objectdatabase2
case project3
     objectdatabase3
 }
因为我认为它打破了开闭立体原理

3-我还想将de数据库对象注入de控制器,Unity执行依赖项注入

有什么想法可以用最好的方式做到这些吗


谢谢大家!

根据您用来连接这些数据库的内容,您可能只需要使用命名连接字符串。将它们命名为项目(客户端发送的任何字符串)或具有某种约定(如param+“\u connString”)

然后让您的DB access对象使用特定的connectionString打开一个连接,并运行您想要的任何查询

仅在这种情况下使用专门的命名约定(如
Project1\u SomeKeyword\u connectionString
Project2\u SomeKeyword\u connectionString
等)将限制潜在的安全问题,以防有人恶意尝试猜测不应用于该目的的connectionString名称(用于您的内部数据库或任何内容)

如果您使用的是普通SQL access对象,该对象将运行您要求它运行的任何查询,那么就可以了。如果您使用的是依赖于特定表对象映射的某种ORM,那么如果DB的其余部分不同,您可能需要为此目的创建该ORM


您还提到您可能希望注入数据库对象。但是注入不会在执行控制器操作之前发生吗?这意味着您必须事先知道正在使用哪个数据库,并且您已经说过项目名称是在操作调用期间提供的。您可能需要在i创建几个EntityFramework模型怎么样?这样每个模型都会连接到不同的数据库。

这可能是数据库中的触发器的一个很好的候选,而不是让Web API处理三个单独数据库中的所有插入,只需将其插入一个数据库,然后让触发器完成其余的工作。