一个数据库,多个 .NET MVC 5 实例

One database, multiple .NET MVC 5 instances

我用 EF 6 应用程序编写了 c# ASP.NET MVC 5。我有 2 个客户。对于他们每个人,我都需要稍微修改应用程序。

我不希望他们共享一个数据库,但使用单独的 table 名称,这是我通过以下方式实现的:

string dbPrefix = "Client1";    
modelBuilder.Entity<Request>().ToTable(dbPrefix + "_TableName);
...

这可行吗,有没有更好的方法?

更新 让我尝试以这种方式解释。有一个应用程序有 10 个 table,我在上面添加了 table 名称作为购买方法的前缀。 应用程序的 2 个(或更多)版本(实例)应占用相同的数据库,但每个版本都有自己的 tables。他们之间没有共享。也可以有不同的应用程序。

App 位于 public/laf 并且 table 前缀是 laf

应用位于 public/perla 并且 table 前缀是 perla

...

除数据库外,一切都是独立的。

想法是将所有生产数据库放在一个地方,以便于备份和其他维护以及价格。

我希望这更有意义:)

您正在寻找的 "better way" 是使用相同的 table,但添加一个额外的列来标识正在使用它的客户端。然后您可以对应用程序进行编程,以便每个客户端只能查看和编辑自己的数据。

通常,您会添加一个 table 来标识客户端:

|  ClientID  |  Name                    |
|------------|--------------------------|
|  1         |  Client 1                |
|  2         |  Client 2                |
|------------|--------------------------|

然后您将使用 ClientID 作为所有其他 table 的外键:

|  SomeTableID  |  ClientID                |   Other fields...
|---------------|--------------------------|
|  1            |  2                       |
|  2            |  1                       |
|---------------|--------------------------|

然后在您的所有查询中,将 ClientID 添加到 where 子句中:

// clientId is the currently logged on.
// Typically, this would be passed into your data access code
// from your business layer.
int clientId = 1;

var query = for someTable as Entities.SomeTable
    where (someTable.ClientID == clientId)
    select someTable

where 子句将阻止每个客户端看到对方的数据。您没有一个 table 结构随着每个客户呈指数增长,维护也更简单。

除了这些好处,您还获得了另一个好处。现在创建涵盖所有客户端的报告非常简单,以防您出于管理目的需要它们。