一个数据库,多个 .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 结构随着每个客户呈指数增长,维护也更简单。
除了这些好处,您还获得了另一个好处。现在创建涵盖所有客户端的报告非常简单,以防您出于管理目的需要它们。
我用 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 结构随着每个客户呈指数增长,维护也更简单。
除了这些好处,您还获得了另一个好处。现在创建涵盖所有客户端的报告非常简单,以防您出于管理目的需要它们。