entity framework - How to avoid unwanted connections to the Azure master database using mobile services? -
the following code:
private void isolateissue() { using (var context = new somename.models.mobileservicecontext()) { system.diagnostics.debug.writeline(context.database.connection.connectionstring); var numberofitems = context.todoitems.count(); } } results in error (when calling var numberofitems):
an exception of type 'system.data.sqlclient.sqlexception' occurred in entityframework.dll not handled in user code additional information: cannot open database "master" requested login. login failed. login failed user 'someloginname'.
this connectionstring:
"data source=servername.database.windows.net;initial catalog=somedatabasename;user id=someloginname;password=somepassword};asynchronous processing=true;trustservercertificate=false;"
it obvious can not connect master database. given username , password, cannot connect master database linqpad (when try similar error). however, should not connect @ master database. when try login on somedatabasename linqpad, succeed in getting number of todoitems (17). proves there no need access master database @ given purpose.
first, have make sure can number of items in mobile service. how do that? initial catalog shows should connect somedatabasename , there no need connect master database number of items. how avoid tries so?
in case helps, here stacktrace:
stacktrace " @ system.data.sqlclient.sqlinternalconnection.onerror(sqlexception exception, boolean breakconnection, action
1 wrapcloseinaction)\r\n @ system.data.sqlclient.tdsparser.throwexceptionandwarning(tdsparserstateobject stateobj, boolean callerhasconnectionlock, boolean asyncclose)\r\n @ system.data.sqlclient.tdsparser.tryrun(runbehavior runbehavior, sqlcommand cmdhandler, sqldatareader datastream, bulkcopysimpleresultset bulkcopyhandler, tdsparserstateobject stateobj, boolean& dataready)\r\n @ system.data.sqlclient.tdsparser.run(runbehavior runbehavior, sqlcommand cmdhandler, sqldatareader datastream, bulkcopysimpleresultset bulkcopyhandler, tdsparserstateobject stateobj)\r\n @ system.data.sqlclient.sqlinternalconnectiontds.completelogin(boolean enlistok)\r\n @ system.data.sqlclient.sqlinternalconnectiontds.attemptonelogin(serverinfo serverinfo, string newpassword, securestring newsecurepassword, boolean ignoresniopentimeout, timeouttimer timeout, boolean withfailover)\r\n @ system.data.sqlclient.sqlinternalconnectiontds.loginnofailover(serverinfo serverinfo, string newpassword, securestring newsecurepassword, boolean redirecteduserinstance, sqlconnectionstring connectionoptions, sqlcredential credential, timeouttimer timeout)\r\n @ system.data.sqlclient.sqlinternalconnectiontds.openloginenlist(timeouttimer timeout, sqlconnectionstring connectionoptions, sqlcredential credential, string newpassword, securestring newsecurepassword, boolean redirecteduserinstance)\r\n @ system.data.sqlclient.sqlinternalconnectiontds..ctor(dbconnectionpoolidentity identity, sqlconnectionstring connectionoptions, sqlcredential credential, object providerinfo, string newpassword, securestring newsecurepassword, boolean redirecteduserinstance, sqlconnectionstring userconnectionoptions, sessiondata reconnectsessiondata)\r\n @ system.data.sqlclient.sqlconnectionfactory.createconnection(dbconnectionoptions options, dbconnectionpoolkey poolkey, object poolgroupproviderinfo, dbconnectionpool pool, dbconnection owningconnection, dbconnectionoptions useroptions)\r\n @ system.data.providerbase.dbconnectionfactory.createpooledconnection(dbconnectionpool pool, dbconnection owningobject, dbconnectionoptions options, dbconnectionpoolkey poolkey, dbconnectionoptions useroptions)\r\n @ system.data.providerbase.dbconnectionpool.createobject(dbconnection owningobject, dbconnectionoptions useroptions, dbconnectioninternal oldconnection)\r\n @ system.data.providerbase.dbconnectionpool.usercreaterequest(dbconnection owningobject, dbconnectionoptions useroptions, dbconnectioninternal oldconnection)\r\n @ system.data.providerbase.dbconnectionpool.trygetconnection(dbconnection owningobject, uint32 waitformultipleobjectstimeout, boolean allowcreate, boolean onlyonecheckconnection, dbconnectionoptions useroptions, dbconnectioninternal& connection)\r\n @ system.data.providerbase.dbconnectionpool.trygetconnection(dbconnection owningobject, taskcompletionsource1 retry, dbconnectionoptions useroptions, dbconnectioninternal& connection)\r\n @ system.data.providerbase.dbconnectionfactory.trygetconnection(dbconnection owningconnection, taskcompletionsource1 retry, dbconnectionoptions useroptions, dbconnectioninternal oldconnection, dbconnectioninternal& connection)\r\n @ system.data.providerbase.dbconnectioninternal.tryopenconnectioninternal(dbconnection outerconnection, dbconnectionfactory connectionfactory, taskcompletionsource1 retry, dbconnectionoptions useroptions)\r\n @ system.data.providerbase.dbconnectionclosed.tryopenconnection(dbconnection outerconnection, dbconnectionfactory connectionfactory, taskcompletionsource1 retry, dbconnectionoptions useroptions)\r\n @ system.data.sqlclient.sqlconnection.tryopeninner(taskcompletionsource1 retry)\r\n @ system.data.sqlclient.sqlconnection.tryopen(taskcompletionsource1 retry)\r\n @ system.data.sqlclient.sqlconnection.open()\r\n @ system.data.entity.infrastructure.interception.dbconnectiondispatcher.<open>b__36(dbconnection t, dbconnectioninterceptioncontext c)\r\n @ system.data.entity.infrastructure.interception.internaldispatcher1.dispatch[ttarget,tinterceptioncontext](ttarget target, action2 operation, tinterceptioncontext interceptioncontext, action3 executing, action3 executed)\r\n @ system.data.entity.infrastructure.interception.dbconnectiondispatcher.open(dbconnection connection, dbinterceptioncontext interceptioncontext)\r\n @ system.data.entity.sqlserver.sqlproviderservices.<>c__displayclass34.<usingconnection>b__32()\r\n @ system.data.entity.sqlserver.defaultsqlexecutionstrategy.<>c__displayclass1.<execute>b__0()\r\n @ system.data.entity.sqlserver.defaultsqlexecutionstrategy.execute[tresult](func1 operation)\r\n @ system.data.entity.sqlserver.defaultsqlexecutionstrategy.execute(action operation)\r\n @ system.data.entity.sqlserver.sqlproviderservices.usingconnection(dbconnection sqlconnection, action1 act)\r\n @ system.data.entity.sqlserver.sqlproviderservices.usingmasterconnection(dbconnection sqlconnection, action1 act)\r\n @ system.data.entity.sqlserver.sqlproviderservices.dropdatabase(sqlconnection sqlconnection, nullable1 commandtimeout, string databasename)\r\n @ system.data.entity.sqlserver.sqlproviderservices.dbdeletedatabase(dbconnection connection, nullable1 commandtimeout, storeitemcollection storeitemcollection)\r\n @ system.data.entity.core.common.dbproviderservices.deletedatabase(dbconnection connection, nullable1 commandtimeout, storeitemcollection storeitemcollection)\r\n @ system.data.entity.core.objects.objectcontext.deletedatabase()\r\n @ system.data.entity.internal.databaseoperations.delete(objectcontext objectcontext)\r\n @ system.data.entity.database.delete()\r\n @ system.data.entity.dropcreatedatabaseifmodelchanges1.initializedatabase(tcontext context)\r\n @ system.data.entity.internal.internalcontext.<>c__displayclassf1.<createinitializationaction>b__e()\r\n @ system.data.entity.internal.internalcontext.performinitializationaction(action action)\r\n @ system.data.entity.internal.internalcontext.performdatabaseinitialization()\r\n @ system.data.entity.internal.lazyinternalcontext.<initializedatabase>b__4(internalcontext c)\r\n @ system.data.entity.internal.retryaction1.performaction(tinput input)\r\n @ system.data.entity.internal.lazyinternalcontext.initializedatabaseaction(action1 action)\r\n @ system.data.entity.internal.lazyinternalcontext.initializedatabase()\r\n @ system.data.entity.internal.internalcontext.getentitysetandbasetypefortype(type entitytype)\r\n @ system.data.entity.internal.linq.internalset1.initialize()\r\n @ system.data.entity.internal.linq.internalset1.get_internalcontext()\r\n @ system.data.entity.infrastructure.dbquery1.system.linq.iqueryable.get_provider()\r\n @ system.linq.queryable.count[tsource](iqueryable`1 source)\r\n
i see in stack: system.data.entity.dropcreatedatabaseifmodelchanges. believe ef needs access master database in order drop , recreate database.
this blog post mentions cleardatabaseschemaifmodelchanges initializer, may want: http://blogs.msdn.com/b/azuremobile/archive/2014/06/07/fresh-updates-to-azure-mobile-services-net.aspx
Comments
Post a Comment