C# 一个数据库,多个.NET MVC 5实例
我已经用EF6应用程序编写了c#ASP.NETMVC5。我有两个客户。在他们每个人之前,我需要稍微修改一下应用程序 我不希望他们共享一个数据库,但使用单独的表名,我通过以下方式实现了这一点:C# 一个数据库,多个.NET MVC 5实例,c#,asp.net-mvc,design-patterns,database-design,entity-framework-6,C#,Asp.net Mvc,Design Patterns,Database Design,Entity Framework 6,我已经用EF6应用程序编写了c#ASP.NETMVC5。我有两个客户。在他们每个人之前,我需要稍微修改一下应用程序 我不希望他们共享一个数据库,但使用单独的表名,我通过以下方式实现了这一点: string dbPrefix = "Client1"; modelBuilder.Entity<Request>().ToTable(dbPrefix + "_TableName); ... string dbPrefix=“Client1”; modelBuilder.Entity
string dbPrefix = "Client1";
modelBuilder.Entity<Request>().ToTable(dbPrefix + "_TableName);
...
string dbPrefix=“Client1”;
modelBuilder.Entity().ToTable(dbPrefix+“\u TableName);
...
这可能吗?还有更好的方法吗
更新
让我试着这样解释。有一个应用程序有10个表,我在上面的表名前面加上了buy方法的前缀。
应用程序的2个(或更多)版本(实例)应占用相同的数据库,但每个版本(实例)都有自己的表。它们之间没有共享。也可能存在不同的应用程序
应用程序驻留在public/laf中,表前缀为laf
应用程序驻留在public/perla中,表前缀为perla
除了数据库之外,所有内容都是独立的
其想法是将所有生产数据库放在一个地方,以便于备份和其他维护,并降低成本
我希望这更有意义:)您寻求的“更好的方法”是使用相同的表,但添加一个额外的列来标识正在使用它的客户端。然后您可以对应用程序进行编程,使每个客户端只能查看和编辑自己的数据
通常,您会添加一个表来标识客户端:
| ClientID | Name |
|------------|--------------------------|
| 1 | Client 1 |
| 2 | Client 2 |
|------------|--------------------------|
然后将ClientID用作所有其他表的外键:
| 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子句将阻止每个客户机查看其他客户机的数据。您没有一个随每个客户机呈指数增长的表结构,而且维护更简单
除了这些好处之外,您还获得了另一个好处。现在,创建跨所有客户端的报告以防您出于管理目的需要它们是非常简单的。您的问题不清楚。您的意思是希望这两个应用程序使用相同的表,但在代码中使用不同的实体名称?还是希望每个应用程序使用不同的实体名称在数据库中使用不同的表,可能使用相同的实体名称?克隆数据库架构会给您带来很多麻烦。尤其是为不同的客户端使用不同的表名称。这一点我很难理解,但仍然没有更好的选择。我接受答案,但这并不能解决我的问题。我没有考虑这一点解决方案,因为此特定应用程序将针对每个客户端进行修改。表(模型)可以不同。但是,是的,我同意对于正常应用程序,这是一个很好的解决方案,对于我的问题,我只需要为一个客户端使用一个db。