C# AppDomain에서 DataDirectory 세팅하기




 ASP.NET에서는 Framework단에서 세팅되는 DataDirectory의 값이 WPF나 Winform, Console Application 에서는 세팅이 되어 있지 않는다. 그래서 EF를 통해 SDF(Compact SQL) 파일이나 LocalDB를 통해 동적으로 DB를 생성시 전혀 엉뚱한 곳에서 물리적인 파일이 생성이 된다. EF를 통해 생성시 AppDomain의 DataDirectory의 값으로 위치를 찾아 파일을 만든다.


 아래와 같이 AppDomain에 값을 저장할 수 있다.


AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));

[코드1] AppDomain의 DataDirectory에 값 세팅



 "코드1"에서와 같이 세팅 후 "코드2"와 같이 실행하면 AppConfig에 설정된 값을 기준으로 DB 파일을 만들게 된다.


using (ContentContext context = new ContentContext())
{
    var content = context.Contents.FirstOrDefault();
}

[코드2] DBContext를 통해 데이터 생성




<entityFramework>   <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">     <parameters>       <parameter value="System.Data.SqlServerCe.4.0" />       <parameter value="|DataDirectory|"/> <!-- 주석처리 가능 -->       <parameter value=""/> <!-- 주석처리 가능 -->     </parameters>   </defaultConnectionFactory>   <providers>     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />     <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />   </providers> </entityFramework>

[코드3] App.Config에서 entityframework 섹션 내용


 "코드3"의 "Parameter"의 값을 기준으로 파일을 생성하게 된다.




 


 

+ Recent posts