1

接続文字列部門に冗長性があるように見えるため、web.config ファイルをクリーンアップしようとしています。しかし、私はそれを1つだけにすることはできないようです.

これが私が持っているものです: これはデータベース ファーストのシナリオです。

私のコンテキストコード:

public partial class InventoryMgmtContext : DbContext
{
    public InventoryMgmtContext()
        : base("name=InventoryMgmtContext")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
  ...
}

InventoryMgmtContext に対応する web.config の接続文字列:

<connectionStrings>    
    <add name="InventoryMgmtContext" connectionString="metadata=res://*/InventoryMgmt.InventoryMgmt.csdl|res://*/InventoryMgmt.InventoryMgmt.ssdl|res://*/InventoryMgmt.InventoryMgmt.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=<SERVER_NAME>;initial catalog=<DB_NAME>;persist security info=True;user id=<UID>;password=<PWD>;MultipleActiveResultSets=True;Application Name=OTIS_InvnMgmt&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

必要なのはそれだけだと思っていましたが、次の接続文字列もあることがわかりました。

<add name="DefaultConnection" connectionString="Data Source=<SERVER_NAME>;Initial Catalog=OTIS;Persist Security Info=True;User ID=<UID>;Password=<PWD>;MultipleActiveResultSets=True;Application Name=OTIS_InvnMgmt" providerName="System.Data.SqlClient" />

また、私の web.config には、DefaultConnection 文字列を参照するメンバーシップ プロバイダーとロール プロバイダーが次のように記述されています。

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
      <providers>
        <clear />
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" connectionStringName="DefaultConnection" />
      </providers>
    </roleManager>
    <membership defaultProvider="SimpleMembershipProvider">
      <providers>
        <clear />
        <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" connectionStringName="DefaultConnection" />
      </providers>
    </membership>

最後に、初期化には次のものがあります。

public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
    {
        private static SimpleMembershipInitializer _initializer;
        private static object _initializerLock = new object();
        private static bool _isInitialized;

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            // Ensure ASP.NET Simple Membership is initialized only once per app start
            LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
        }

        private class SimpleMembershipInitializer
        {
            public SimpleMembershipInitializer()
            {

                try
                {
                    if (!WebSecurity.Initialized)
                    {
                        WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: false);
                        //WebSecurity.InitializeDatabaseConnection("InventoryMgmtContext", "UserProfile", "UserId", "UserName", autoCreateTables: false);

                    }
                }
                catch (Exception ex)
                {
                    throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
                }
            }
        }
    }

ロールとメンバーシップ プロバイダーを代わりに InventoryMgmtContext 文字列を指すように変更しましたが、これは機能しますが、WebSecurity.InitializeDatabase を (元の DefaultConnection から) InventoryMgmtContext を使用するように変更すると、次のようになります。

WebSecurity.InitializeDatabaseConnection("InventoryMgmtContext", "UserProfile", "UserId", "UserName", autoCreateTables: false);

次のエラーが表示されます。

"Unable to find the requested .Net Framework Data Provider.  It may not be installed."

プロジェクト全体で「DefaultConnection」を検索しましたが、これがどこでどのように参照されているかを見つけることができません。

私は何が欠けていますか?

4

0 に答える 0