0

Я написал C# ASP.NET MVC 5 с приложением EF 6. У меня 2 клиента. Для каждого из них мне нужно немного изменить приложение.Одна база данных, несколько .NET MVC 5 экземпляров

Я не буду их делить одну базу данных, но с отдельными именами таблиц, которые я достигнутыми:

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

Возможно ли это и есть лучший способ?

ОБНОВЛЕНИЕ Позвольте мне попытаться объяснить этот путь. Существует приложение, в котором есть 10 таблиц, и я предпочитаю использовать метод имен таблиц с префиксом выше. 2 (или более) версии (экземпляры) приложения должны занимать одну и ту же базу данных, но у каждого есть свои собственные таблицы. Нельзя делиться между ними. Там могут быть разные приложения.

App находится в публичном/LAF и префикс таблиц является LAF

App находится в общественном/Perla и префикс таблицы Perla

...

Все отдельно, за исключением базы данных.

Идея состоит в том, чтобы все производственные базы данных были в одном месте, для упрощения резервного копирования и другого обслуживания, а также цены.

Я надеюсь, что это имеет смысл :)

+0

Ваш вопрос непонятен. Вы имеете в виду, что вы хотите, чтобы 2 приложения использовали одни и те же таблицы, но чтобы они использовали разные имена сущностей в вашем коде? Или вы хотите, чтобы каждое приложение использовало разные таблицы в базе данных, возможно, используя те же имена сущностей? –

+1

Клонирование схемы базы данных создаст вам много головных болей. Особенно, используя разные имена таблиц для разных клиентов. – usr

+0

То, что я понял, трудный путь, но у меня нет лучшей альтернативы – HerGiz

ответ

0

В «лучший путь», который Вы ищете, чтобы использовать одни и те же таблицы, но добавить дополнительный столбец, который идентифицирует клиента, который использует его. Затем вы можете запрограммировать приложение, чтобы каждый клиент мог видеть и редактировать свои собственные данные.

Как правило, вы бы добавить таблицу для идентификации клиента:

| 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 wi чтобы каждый клиент не видел данные другого. У вас нет структуры таблиц, которая растет экспоненциально с каждым клиентом, а обслуживание упрощается.

В дополнение к этим преимуществам вы получаете еще один. В настоящее время очень сложно создавать отчеты, охватывающие всех клиентов, если они вам нужны для административных целей.

+0

Я принимаю ответ, но это не решает мою проблему. Я не рассматривал это решение, так как это конкретное приложение будет изменено для каждого клиента. Таблицы (модели) могут быть разными.Но да, я согласен с тем, что для нормального применения это хорошее решение, и для моей задачи мне просто нужно использовать один db для одного клиента. – HerGiz

Смежные вопросы