2

SAAS ソリューションとしてホストされている CodeFluent を使用して構築されたアプリケーションがあります。Ms Azure データベースをストレージとして使用していますが、現在はすべての顧客が同じデータベースにいます。SAAS ソリューションのベスト プラクティスを考慮すると、データベースを分離する方がよいでしょう。別のクライアント データをバックアップ/復元する方が簡単で、セキュリティの観点からも優れています。Azure エラスティック データベース プールを使用したいと考えています。

しかし、実際には単純ではありません。Codefluent は、web.config で設定された固定データベース接続を使用します。そして、どうにかしてそれを変更できる場合、使用するデータベースをどのように決定できますか。セッションや httpcontext が常に存在するとは限りません... 誰かが同じ課題を抱えていましたか?どのように解決しましたか?

4

1 に答える 1

3

ユーザーごとに 1 つのデータベースがあります。つまり、データベースに対してクエリを実行する前に、接続文字列を変更する必要があります。CodeFluent エンティティを使用すると、実行時に接続文字列を変更できます。

CodeFluentContext context = CodeFluentContext.Get(MyApp.Constants.MyAppStoreName);
CodeFluentPersistence persistence = context.Persistence;
persistence.ConnectionString = GetCurrentTenantConnectionString();
var products = ProductCollection.LoadAll();

または、カスタムを作成できますCodeFluentPersistence:

public class MultiTenantPersistence : CodeFluentPersistence
{
    public MultiTenantPersistence(CodeFluentContext context) : base(context)
    {
    }

    public override string ConnectionString
    {
        get
        {
            return GetCurrentTenantConnectionString();
        }
        set
        {
            base.ConnectionString = value;
        }
    }

    private string GetCurrentTenantConnectionString()
    {
        // TODO Implement your own logic
        return $"Server=sample;Database=sample_{Context.User.UserName};Trusted_Connection=True;";
    }
}

MultiTenantPersistence次に、構成ファイルにを登録する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="Samples" type="CodeFluent.Runtime.CodeFluentConfigurationSectionHandler, CodeFluent.Runtime" />
  </configSections>

  <Samples persistenceHookTypeName="Sample.MultiTenantPersistence, Sample" />
</configuration>
于 2015-11-24T14:38:26.760 に答える