WPF 및 Entity Framework CodeFirst로 응용 프로그램을 개발 중입니다.
하나의 요구 사항은 사용자가 새 프로젝트마다 별도의 데이터베이스 파일을 만들 수 있다는 것입니다.
DbContext : 응용 프로그램 설정에 정의 된Entity Framework 코드 우선 : 프로젝트 당 별도의 데이터베이스 만들기
public class TestContext : DbContext, IUnitOfWork
{
public TestContext()
: base("TestContext")
{
}
#region Implementation of IUnitOfWork
public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
{
return base.Set<TEntity>();
}
#endregion Implementation of IUnitOfWork
public DbSet<Destination> Destinations { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new DestinationMap());
}
연결 문자열 :
<connectionStrings>
<clear />
<add name="TestContext" providerName="System.Data.SqlClient" connectionString="Server=.\sqlexpress;Database=databaseName;Integrated Security=True;Connect Timeout=300;MultipleActiveResultSets=true;" />
</connectionStrings>
I 요청 패턴에 따라 상황을 구현하는 IUnitOfWork 인터페이스에서 DbContext를 주입 StructureMap를 사용했습니다. 이 StructureMap 설정입니다 :
ObjectFactory.Initialize(x => x.Scan(scanner =>
{
x.For<IUnitOfWork>().CacheBy(InstanceScope.Hybrid).Use<SpitfireContext>();
}));
사용자가 나는 새로운 프로젝트에 대한 데이터베이스를 만들고 연결 문자열과 힘 응용 프로그램을 변경하려고 새 프로젝트를 만듭니다.
public static void ChangeDatabase(Guid guid)
{
var sqlConnectionStringBuilder =
new SqlConnectionStringBuilder(ConfigHelper.ActiveConnection);
sqlConnectionStringBuilder["Database"] = guid.ToString();
ConfigHelper.ActiveConnection = sqlConnectionStringBuilder.ToString();
Database.DefaultConnectionFactory =
new System.Data.Entity.Infrastructure.SqlConnectionFactory(ConfigHelper.ActiveConnectionString());
Database.SetInitializer(
new MigrateDatabaseToLatestVersion<TestContext, MigrationConfiguration>());
using (var context = new TestContext())
{
context.Database.Initialize(true);
}
}
응용 프로그램은 첫 번째 프로젝트에 대한 데이터베이스를 만들고 그 후에 미리보기 데이터베이스를 마이그레이션하려고합니다.
DbConext 개체를 직접 내 코드에 만들지 않아도 해당 연결 문자열을 해당 생성자에 전달할 수 없습니다.
내 문제에 대해 무엇을 제안합니까?
내 코드에 어떤 문제가 있습니까?