Ошибка изменения строки подключения объекта - PullRequest
0 голосов
/ 04 января 2012

У меня проблема при изменении сущностей модели 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;
    }

}

Любая помощь, пожалуйста?

1 Ответ

2 голосов
/ 06 января 2012

Пожалуйста, смотрите мой ответ на другой ваш вопрос :

Сначала вам нужно будет определить строку подключения, которую вы хотите использовать, и только после этого вы сможете обновить объект Entities:

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

После этого вы сможете нормально использовать сущности, указывая правильную базу данных / сервер.

...