0

モデル エンティティを変更するときに問題が発生しましconnection string
。ユーザーが最初にログインしたときにKurtDBEntities conection string適切に選択されています
が、管理者if (daRoles.IsUserInRole(User, 1))または他のインスタンスとしてログインすると、次のエラーが表示されます。

System.InvalidOperationException was unhandled by user code
  Message=No modifications to connection are permitted after the metadata has been registered either by opening a connection or constructing the connection with a MetadataWorkspace.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.EntityClient.EntityConnection.ValidateChangesPermitted()
       at System.Data.EntityClient.EntityConnection.set_ConnectionString(String value)
       at DataLayer.ConnectionClass..ctor(String User) in Documents\Visual Studio 2010\Projects\DataLayer\ConnectionClass.cs:line 32
       at BusinessLayer.BLBase..ctor(String user) in Documents\Visual Studio 2010\Projects\BusinessLayer\BLBase.cs:line 54
       at BusinessLayer.Roles..ctor(String userLogged) in Visual Studio 2010\Projects\BusinessLayer\Roles.cs:line 12
       at PresentationLayer.UserControls.Menu.Page_Load(Object sender, EventArgs e) in C:\Users\Documents\Visual Studio 2010\Projects\PresentationLayer\UserControls\Menu.ascx.cs:line 23
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: 

と:

public ConnectionClass(string User)
        {

            this.Entities = new KurtDBEntities();
            DataLayer.DARoles daRoles = new DARoles(this.Entities);
            if (User == "Login")

        {
            this.Entities.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["KurtDBEntities"].ConnectionString.ToString();
        }
        else
        {
            //can also use entity connection string builder

            if (User != "")
            {
                if (daRoles.IsUserInRole(User, 1))
                {

                    this.Entities.Connection.ConnectionString = @"Data Source=KURT-PC\SQLEXPRESS;Initial Catalog=KurtDB;User ID=Admin;Password=123456";
                }
                else if (daRoles.IsUserInRole(User, 2))
                {
                    this.Entities.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["BasicUser"].ConnectionString.ToString();
                }

            }
            else
            {
                this.Entities.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["KurtDBEntities"].ConnectionString.ToString();
            }

        }


        //this.Entities.Connection.ConnectionString = conn;
    }

}

助けてください?

4

1 に答える 1

2

あなたの他の質問に対する私の答えを見てください:

まず、使用する接続文字列を決定する必要があります。その後でのみ、Entities オブジェクトを新しくすることができます。

string connectionString = GetConnectionStringBasedOnUserRole(); // do your magic here
this.Entities = new KurtDBEntities(connectionString);

この後、正しいデータベース/サーバーを指して、エンティティを通常どおり使用できるようになります。

于 2012-01-05T22:42:22.880 に答える