WCF サービス セッション ベースを作成し、ログイン メソッドを提供します。このメソッドでは、使用するデータベースを決定する必要があります。DataModel が同じ場合、またはクライアントごとに異なる DataModels がある場合は、edmx の ConnectionString を変更できます。クライアントごとに edmx インスタンスを作成する必要があります。
ここでいくつかの単純な疑似コード、entityID はクライアントを識別します
EntityConnectionString を作成するには、このリンクをチェックしてください
セッションベースの WCF サービスを作成するには、サービス インターフェイスをそのように定義する必要があります。
[ServiceContract(SessionMode = SessionMode.Required)]
public interface ISampleService
{
[OperationContract]
void Login(string user, string password, int entityID);
}
ServiceImplementation にはこれらの属性が必要です。必要に応じてこれらの値を変更してください。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single, AutomaticSessionShutdown = true)]
public class SampleService : ISampleService
{
SampleEntities datacontext = null;
public void Login(string user, string password, int entityID)
{
if(CheckLoginData(user, password))
{
InitDataContext(entity_id);
}
}
private void InitDataContext(int entityID)
{
var connectionString = GetConnectionStringFromEntityID(entityID);
datacontext = new SampleEntities(connectionString);
}
private string GetConnectionStringFromEntityID(int entityID)
{
var providerName = "System.Data.SqlClient";
var serverName = "localhost";
var databaseName = GetDatabaseNameFromEntityID(entityID);
var sqlBuilder = new SqlConnectionStringBuilder();
sqlBuilder.DataSource = serverName;
sqlBuilder.InitialCatalog = databaseName;
sqlBuilder.IntegratedSecurity = true;
var providerString = sqlBuilder.ToString();
var entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = providerName;
entityBuilder.ProviderConnectionString = providerString;
entityBuilder.Metadata = @"res://*/SampleDatabase.csdl|
res://*/SampleDatabase.ssdl|
res://*/SampleDatabase.msl";
return entityBuilder.ToString();
}
}