Asp.net web api 最佳实践WebAPI和多个数据库
我有个问题。我正在用ASP.NETMVC创建一个webAPI,我有三个不同的项目和三个独立的数据库 我有一个在一个表中插入的方法。该表存在于三个数据库中 客户机以字符串形式向我发送项目 我的问题是: 1-我应该将webAPI划分为三个不同的URL吗? 2-我不想以这种方式在控制器中创建交换机或if elseif: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
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处理三个单独数据库中的所有插入,只需将其插入一个数据库,然后让触发器完成其余的工作。