1

私は、ADO.NETエンティティデータモデルに依存するプロジェクトに取り組んでいます。会社の各部門(マーケティング、財務、管理、およびHR)に1つずつ、合計4つのデータベーススキーマがあります。現在、各ユーザーがどの部門に所属しているかを知っています。その部門を使用して、ユーザーが接続できるデータベースを決定したいと思います。

C#コードで、実行時に接続文字列を設定するにはどうすればよいですか?現在、私は持っています

string connectionString = GetUsersConnectionString();
using (MyEntities entities = new MyEntities())
{
  MyDataEntity myDataEntity = new MyDataEntity();

  // Save to the database
  entities.MyDataEntity.Add(myDataEntity);
  entities.SaveChanges();
}

ここで何が欠けていますか?MyEntitiesの接続文字列をに設定するにはどうすればよいconnectionStringですか?

4

3 に答える 3

1

ここに良い方法があります。

public static class ConnectionManager
    {
        public static string GetSqlConnectionString()
        {

            var serverName = @"" + ConfigurationManager.AppSettings["ServerName"];
            var databaseName = ConfigurationManager.AppSettings["DatabaseName"];
            var username = ConfigurationManager.AppSettings["Username"];
            var password = ConfigurationManager.AppSettings["Password"];

            SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();

            providerCs.DataSource = serverName;
            providerCs.InitialCatalog = databaseName;
            //providerCs.IntegratedSecurity = true;
            //providerCs.UserInstance = true;
            providerCs.UserID = username;
            providerCs.Password = password;
            var csBuilder = new EntityConnectionStringBuilder();

            csBuilder.Provider = "System.Data.SqlClient";
            csBuilder.ProviderConnectionString = providerCs.ToString();

            csBuilder.Metadata = string.Format("res://{0}/yourDataBase.csdl|res://{0}/yourDataBase.ssdl|res://{0}/yourDataBase.msl",
                typeof(yourDataBaseEntities).Assembly.FullName);

            return csBuilder.ToString();
        }
    }

使用法:

あなたのapp.config代わりにこのコード

<appSettings>
    <add key="ServerName" value="UNKNOWN01-PC\sampleServer"/>
    <add key="DatabaseName" value="samplDatabase"/>
    <add key="Username" value="sampleUser"/>
    <add key="Password" value="sampPass"/>
</appSettings>

それで、

string connectionString = GetSqlConnectionString();
using (MyEntities entities = new MyEntities(connectionString))
{
  MyDataEntity myDataEntity = new MyDataEntity();

  // Save to the database
  entities.MyDataEntity.Add(myDataEntity);
  entities.SaveChanges();
}
于 2013-01-16T14:33:58.067 に答える
0

使用する:

string connectionString = GetUsersConnectionString();
using (MyEntities entities = new MyEntities(new EntityConnection(connectionString )))
{
  MyDataEntity myDataEntity = new MyDataEntity();

  // Save to the database
  entities.MyDataEntity.Add(myDataEntity);
  entities.SaveChanges();
}
于 2013-01-16T14:11:23.360 に答える
0

Model.Designer.cs ファイルで、必要な数の引数を取る新しい Entities オブジェクトを初期化する必要があります。例えば:

namespace:MyModel
{
#region Contexts 
public partial class MyEntities : ObjectContext
{
    #region Constructors

public MyEntities(EntityConnection connection) //add the required arguments
        : base(connection, "Entities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }
....

次に、新しいエンティティを使用して、接続文字列が取得するデータを操作します。

 MyModel.MyEntities db = new MyModel.Entities(connectionString);
 var query = from rows in db.Table_Name orderby rows.ID select rows; 
于 2013-08-13T01:36:13.020 に答える