ASP.NET MVC 3 с уже встроенным SQL Server на разных базах данных - PullRequest
1 голос
/ 01 июля 2011

Я создаю проект ASP.NET MVC3 в C #, который использует уже существующую базу данных SQL Server.

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

Итак, я заинтересован в получении (а не обновлении или удалении) данных из одной и той же таблицы каждого клиента. Это пример конфигурации базы данных:
DatabaseCustomerName1
- TableNeeded

DatabaseCustomerName2
- TableNeeded

DatabaseCustomerNameN
- Требуется

Вопрос в том ... как мне создать модель?

Зная, что если бы мне пришлось сделать это только для одного клиента, я бы создал модель на основе полей таблиц, как мне справиться с ситуацией с несколькими клиентами?

Заранее спасибо.

Аттила

Ответы [ 4 ]

1 голос
/ 01 июля 2011

У вас должен быть интерфейс для класса Repository например и различные реализации для каждой базы данных клиентов

    internal interface IProductRepository
{
    IEnumerable<Product> GetAll();
}

class ProductRepositoryCustumerOne : IProductRepository
{
    public IEnumerable<Product> GetAll()
    {
        //code to retrieve data
    }
}

class ProductRepositoryCustumerTwo : IProductRepository
{
    public IEnumerable<Product> GetAll()
    {
        //code to retrieve data
    }
}

после того, как вы можете внедрить в контейнер IoC, какую реализацию вам нужно

0 голосов
/ 01 июля 2011

Безопасно ли предполагать, что вы используете Entity Framework?Одинакова ли схема во всех базах данных?

Вы должны быть в состоянии создать свою модель для одной из баз данных.Затем, когда вы захотите выбрать другого клиента, вам нужно будет изменить значение Начального каталога (или эквивалентное) в строке подключения перед созданием контекста данных.

В настоящий момент у меня нет удобного кода,Это помогает?

0 голосов
/ 01 июля 2011

Как насчет создания Sql View для всех таблиц на основе выбранной ссылки:

 Select 'Customer 1' as Customer, c.* from FirstDb.dbo.Cusotmers c
 Union Select 'Customer 2' as Customer, c.* from SecondDb.dbo.Cusotmers c
 Union ...

Чем вы можете изменить это представление, например, с помощью EF или linq to sql.

0 голосов
/ 01 июля 2011

Позвольте мне прояснить ваш вопрос, вы говорите, что у вас есть несколько клиентов с базой данных каждый?

Итак ...

Базы данных

  • Клиент A
  • Клиент B

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

  • Клиент A> TheTable
  • Клиент B> TheTable

Итак, вы спрашиваете, как вы можете создать модель, которая будет работать для любого клиента для доступа к TheTable?

Это правильно?

...