使用实体框架连接到数据库 .

连接字符串是根据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 在使用动态生成的连接字符串时,实体框架生成错误,即无效的对象名称 . 虽然表存在于数据库中 .

查看下面的图片以便更好地理解

enter image description here

表存在以下检查图:

enter image description here

位于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)

enter image description here