Это возможно, но гораздо сложнее, чем кажется. Файл EDMX состоит из трех частей, которые определяют метаданные отображения: SSDL (описание базы данных), CSDL (описание объектов), MSL (отображение между SSDL и CSDL). Информация о схеме является частью SSDL. Если вы хотите получить доступ к другой схеме, вы должны переключить весь документ SSDL = вам нужно новое соединение сущности или строка соединения. Вы также должны создать SSDL для каждого клиента.
Вот пример объявления SSDL для одной сущности (вы можете увидеть схему, определенную в edmx:model/Schema/EntityContainer/EntitySet/@Schema
):
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="Model.Store" Alias="Self" Provider="System.Data.SqlClient"
ProviderManifestToken="2008"
xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="ModelStoreContainer">
<EntitySet Name="TestEntitySet" EntityType="Model.Store.TestEntitySet"
store:Type="Tables" Schema="dbo" />
</EntityContainer>
<EntityType Name="TestEntitySet">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="int" StoreGeneratedPattern="Identity"
Nullable="false" />
</EntityType>
</Schema>
</edmx:StorageModels>
- Да, это будет работать, но, как я описал, это не очень хорошее решение.
- Да, у вас может быть одна служба, которая обслуживает всех клиентов, но вы должны разработать правильную аутентификацию для подключения к правильному набору таблиц. У вашей компании могут возникнуть очень серьезные юридические проблемы, если вы работаете с конфиденциальными данными, и ваш клиент случайно (из-за ошибки) получит доступ к данным другого клиента.
- Проблема аутентификации и сопоставления аутентифицированных пользователей с исправлением набора таблиц - это полностью за пределами EF.
- Вы будете использовать либо несколько строк соединения (по одной на каждого клиента), либо вы будете создавать соединение сущностей динамически.
Правильный подход здесь - это создание новой базы данных для каждого клиента. Он лучше обслуживается, а настройка безопасности для такого сценария намного проще.