最佳实践Web API和多个数据库

时间:2014-12-10 16:38:34

标签: asp.net-web-api solid-principles

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

我有一种方法可以在一个表中进行插入。该表存在于三个数据库中。

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

我的问题是:

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

switch (project) {
case project1:
     objectdatabase1
case project2:
     objectdatabase2
case project3
     objectdatabase3
 }

因为我认为它违反了OPEN CLOSED Solid原则。

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

有什么想法以最好的方式做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:0)

根据您用于连接这些数据库的内容,您可以使用命名的connectionStrings。将它们命名为项目(客户端发送的任何字符串)或具有一些约定(如param +" _connString")。

然后让您的数据库访问对象使用该特定的connectionString打开连接,并运行您想要的任何查询。

使用专门的命名约定(如Project1_SomeKeyword_connectionStringProject2_SomeKeyword_connectionString等)仅针对此案例将限制潜在的安全问题,以防有人恶意尝试猜测不应该用于的connectionString名称那个目的(对于你的内部数据库或其他)。

如果您使用的是纯SQL访问对象,它将运行您要求的任何查询,那就没问题了。如果您正在使用某些依赖于特定表对象映射的ORM,则可能需要为此目的创建该ORM,如果其余DB不同。

您还提到您可能要注入数据库对象。但是,在执行控制器操作之前不会进行注入吗?这意味着您必须事先知道您正在使用哪个DB,并且您已经说过在动作调用期间提供了项目名称。您可能需要在注射期间检查请求,这会使一切变得复杂。

答案 1 :(得分:0)

如何创建多个EntityFramework模型?因此,每个模型都将连接到不同的数据库。