データがapp.config
の場合、それは簡単です!あなたはこの2つのクラスを使用する必要があります。
EntityConnectionStringBuilder
https://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnectionstringbuilder(v=vs.110).aspx そして
SqlConnectionStringBuilder
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder(v=vs.110).aspx
を私は、このページからそれを学ぶ:Programmatic Connection Strings in Entity Framework 6それは非常に良いガイドです。いずれの場合でも、そのリンクはあなたを助けなかった!このようなだけで、Googleの何か:
C#はランタイムあなたのコード内のすべての接続文字列を入れた後
で接続文字列を定義し、あなたが行くと、あなたのアプリが使用することはありませんので、app.config
ファイルのconnectionStrings
タグから機密データを削除することができますそれはもう!次に、コードを再度コンパイルします。
あなたがEFでDBファーストを使用している場合は、あまりにもこのガイドをチェックすることができます:更新されたHow to set Connection String with Entity Framework
:
は私が管理し、それらのプログラムで接続文字列を作成し、私のクラスのうちの2つを追加します(ダイナミック)、1つはSQL Server Compact Edition(SQL Server CE)を使用したEntity Frameworkプロジェクトに属し、もう1つはSQL Server Express 2014(sa
ユーザー名)を使用した別のエンティティフレームワークプロジェクトに属します。私は誰もがそれらを必要とする場合には、ここで両方の方法を残します:
をこれは私のSQL Server CEプロジェクトに属しています
public static string GetDBConnectionString(string dataParentPath = "")
{
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
SqlCeConnectionStringBuilder sqlCEBuilder = new SqlCeConnectionStringBuilder();
if (string.IsNullOrEmpty(dataParentPath) == true)
dataParentPath = @"C:\MyDBFolder\CMS.sdf";
sqlCEBuilder.DataSource = dataParentPath;
sqlCEBuilder.Password = "12345687";
sqlCEBuilder.MaxDatabaseSize = 4090;
entityBuilder.Metadata = "res://*/CMS.csdl|res://*/CMS.ssdl|res://*/CMS.msl";
entityBuilder.ProviderConnectionString = sqlCEBuilder.ToString();
entityBuilder.Provider = "System.Data.SqlServerCe.4.0";
return entityBuilder.ToString();
}
を。これは、SQL Server認証と私のSQL Server Expressのプロジェクトに属している:
using System;
using System.Collections.Generic;
using System.Data.Entity.Core.EntityClient;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS
{
class mySettings
{
public static string GetDBConnectionString()
{
// **************************************************
// This is my "ConnectionString" from App.config file.
// <connectionStrings>
// <add name="CMSEntities"
// connectionString=
// "metadata=res://*/CMS.csdl|res://*/CMS.ssdl|res://*/CMS.msl
// ;provider=System.Data.SqlClient
// ;provider connection string="
// ;data source=MY-PC\SQLEXPRESS
// ;initial catalog=CMS
// ;user id=sa
// ;password=12345687
// ;MultipleActiveResultSets=True
// ;App=EntityFramework
// ""
// providerName="System.Data.EntityClient" />
//</connectionStrings>
// **************************************************
string metaData = "res://*/CMS.csdl|res://*/CMS.ssdl|res://*/CMS.msl";
string providerName = "System.Data.SqlClient";
string dataSource = @"MY-PC\SQLEXPRESS";
string databaseName = "CMS"; // = InitialCatalog
string userID = "sa";
string password = "12345687";
string appName = "EntityFramework";
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
// = = = = = = = = = = = = = = = =
sqlBuilder.DataSource = dataSource;
sqlBuilder.InitialCatalog = databaseName;
sqlBuilder.MultipleActiveResultSets = true;
sqlBuilder.UserID = userID;
sqlBuilder.Password = password;
sqlBuilder.ApplicationName = appName;
// = = = = = = = = = = = = = = = =
entityBuilder.Provider = providerName;
entityBuilder.Metadata = metaData;
entityBuilder.ProviderConnectionString = sqlBuilder.ConnectionString;
return entityBuilder.ToString();
}
}
}
ご覧のとおり、両方のプロジェクトのMyデータベースの名前は「CMS」なので、エンティティの名前は「CMSEntities
」となります。今すぐ! のDbContext
コンストラクタをオーバーライドする必要があります。重要ですが最も簡単な部分です!私のより良い説明は、このページ「http://www.cosairus.com/Blog/2015/3/10/programmatic-connection-strings-in-entity-framework-6」からです:
今すぐあなたのエンティティモデルは、DbContextから延び、DbContextは、接続文字列を渡すために コンストラクタを提供していますが、あなたのエンティティモデルが あなたのため、これらのコンストラクタをオーバーロードしません。 。 コンストラクタのオーバーロードにアクセスするには、 の新しいクラスパーシャルを、 エンティティモデルと同じ名前空間にエンティティモデルデータベースコンテキストを作成する必要があります。プロのヒント: は、将来生成されるコード が変更を上書きしない場合に、エンティティ モデルデータベースコンテキストとは異なる名前でcsファイルのファイル名を指定するようにしてください。
だから私は私のプロジェクトのルートでクラスを構築し、クラスがpartial
でなければなりません:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS // Your Project Namespace
{
public partial class CMSEntities : DbContext
{
public CMSEntities(string connectionString)
: base(connectionString)
{
}
}
}
といつでも私はこのコードを使用します私のデータベースへのアクセスをしたい:
using (CMSEntities db = new CMSEntities(CMSSettings.GetDBConnectionString()))
{
// Do your DB stuff here...
}
私はこのサイト「stackoverflow」とユーザーからそのすべてを学ぶあなたや他の人を助けてくれることを願っています。
グッドラック
SQL認証を使用しないでください。データベースのWindows資格情報を使用します。 – jdweng
クライアントがサーバのコードにアクセスすることができず、サーバメソッドのみを呼び出すことができるクライアント - サーバコードを書く... –
[データベースコードをソースコードに保存するのを避けるには? http://stackoverflow.com/questions/42833/how-do-i-avoid-having-the-database-password-stored-in-plaintext-in-sourcecode) –