2009-09-29 12 views
19

私のプロジェクトでは、EntityFrameworkを使用しているDALレイヤーでいくつかの単体テストを実行したいと考えています。私は、テストを実行する前に常に新しいデータベースをscripsから作成しています(テストを行うときは常に同じ初期データを保持するためです)。テストの終わりに、このデータベースは削除されます(すべては[ClassInitialize()]および[ClassCleanup()]属性の助けを借りて自動的に行われます)実行時にEntity Frameworkの接続文字列のdb nameを変更します

生成されるデータベースの名前は常にTestDB -2009-01-31--12-00-00、私の同僚のテストデータベースと競合しないように。

私が実際に持っている問題は、EntityFrameworkに生成されたデータベースに接続します(名前は実行時に生成されます)。現在、app.configファイルで指定されている接続文字列に接続します。通常は正常です。 DALのdllの外側から(EFコンテキスト上に何も設定せずに)行うことができる何かのために。

ご協力いただきまして誠にありがとうございます。

ありがとうございました。

答えて

38

ObjectContextを作成するときは、ConnectionStringをパラメータとして使用するコンストラクタオーバーロードを使用する必要があります。

EntityConnectionStringBuilderを使用してこのConnectionStringを構築できます。具体的には、基礎となるデータベースがSQL Serverであると仮定すると、SqlConnectionStringBuilderを使用して、EntityConnectionStringBuilder.ProviderConnectionStringの値を構築できます。ここで

var scsb = new SqlConnectionStringBuilder(); 
scsb.DataSource = "localhost"; 
scsb.InitialCatalog = "MyDB"; 
scsb.IntegratedSecurity = true; 

SQL Server接続文字列を構築し、ここでエンティティのConnectionStringを構築するいくつかのコードだいくつかのコードです:

var builder = new EntityConnectionStringBuilder(); 
builder.Metadata = "res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl"; 
builder.Provider = "System.Data.SqlClient"; 
builder.ProviderConnectionString = scsb.ConnectionString; 
関連する問題