使用实体框架连接到数据库 .
连接字符串是根据UI中的用户选择动态生成的 .
场景是用户从UI中选择一些连接并基于该选择实体框架必须连接数据库查询 .
下面的代码用于生成实体连接字符串 . 但它并没有像预期的那样发挥作用 .
实体部分类用于传递连接字符串 .
public partial class Entities
{
public Entities(string connectionName)
: base(connectionName)
{
}
}
public static void GenerateEntityConnectionString(string serverName, string databaseName, string providerName,
string databaseUserId, string databasePassword, short? databaseTimeout)
{
string connnectionString = string.Empty;
// Specify the provider name, server and database.
//string providerName = "System.Data.SqlClient";
//string serverName = ".";
//string databaseName = "AdventureWorks";
// Initialize the connection string builder for the
// underlying provider.
SqlConnectionStringBuilder sqlBuilder =
new SqlConnectionStringBuilder();
// Set the properties for the data source.
sqlBuilder.DataSource = serverName;
sqlBuilder.InitialCatalog = databaseName;
sqlBuilder.IntegratedSecurity = false;
sqlBuilder.UserID = databaseUserId;
sqlBuilder.Password = databasePassword;
sqlBuilder.MultipleActiveResultSets = true;
sqlBuilder.ConnectTimeout = Convert.ToInt32(databaseTimeout);
// Build the SqlConnection connection string.
string providerString = sqlBuilder.ToString();
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder =
new EntityConnectionStringBuilder();
//Set the provider name.
entityBuilder.Provider = providerName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;
// Set the Metadata location.
entityBuilder.Metadata = @"res://*/EF.EntitiesModal.csdl|res://*/EF.EntitiesModal.ssdl|res://*/EF.EntitiesModal.msl";
//entityBuilder.Metadata = @"res://*/";
connnectionString = entityBuilder.ConnectionString;
ConnectionString = connnectionString;
}
Updated 在使用动态生成的连接字符串时,实体框架生成错误,即无效的对象名称 . 虽然表存在于数据库中 .
查看下面的图片以便更好地理解
表存在以下检查图:
位于System.Data.SqlClient.TdsParser的System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,Boolean breakConnection,Action1 wrapCloseInAction)中的System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action1 wrapCloseInAction) . System.Data.SqlClient.SqlDataReader.TryConsumeMetaData的System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady)中的ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose) ()位于System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)的System.Data.SqlClient.SqlDataReader.get_MetaData()处于System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior) ,Boolean returnStream,Boolean async,Int32 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法,TaskCompletionSource1完成,Int32超时,任务和任务,布尔asyncWrite)处的超时,任务和任务,布尔asyncWrite,SqlDataReader ds,布尔值describeParameterEncryptionRequest) System.Data.SqlClient.SqlCommand.ExecuteDbDataReader的System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method)中的System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法) CommandBehavior行为)位于System.Data.Entity.Infrastructure的System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher . <Reader> b__c(DbCommand t,DbCommandInterceptionContext1 c)的System.Data.Common.DbCommand.ExecuteReader(CommandBehavior行为) . Interception.InternalDispatcher1.Dispatch [TTarget,TInterceptionContext,TResult](TTarget目标,Func3操作,TIn在System.Data的System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)的System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand命令,DbCommandInterceptionContext interceptionContext)中的terceptionContext interceptionContext,Action3执行,Action3执行) System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)中的.Common.DbCommand.ExecuteReader(CommandBehavior behavior)