Entity Framework 컀λ₯μ μ€νΈλ§ κ°λ³μ μΌλ‘ ꡬμ±νκΈ°
Entity Framework (EF) μ λ·λ· μ΄ν리μΌμ΄μ κ°λ°μ μ¬μ©ν μ μλ ORM λκ΅¬λ€ μ€ νλμ΄λ€. λ€λ₯Έ ORM λꡬλ€μ λΉν΄ λ¬λ컀λΈλ μ μ λΏ μλλΌ μ¬μ©μ΄ κ½€ μ§κ΄μ μ΄κΈ° λλ¬Έμ΄λ€. λ€λ§, νκ°μ§ λΆνΈν μ μ΄ μλ€λ©΄ λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ μ€νΈλ§μ΄ λ무 κΈΈλ€λ κ². λ³΄ν΅ web.config νΉμ app.configμ λ€μ΄κ°λ EF 컀λ₯μ μ€νΈλ§μ λλ΅ μλμ κ°μ ννμ΄λ€.
<connectionStrings> <add name="ApplicationDataContext" connectionString="metadata=res://*/ApplicationDataContext.csdl|res://*/ApplicationDataContext.ssdl|res://*/ApplicationDataContext.msl;provider=System.Data.SqlClient;provider connection string="data source=(LocalDB)\v11.0;attachdbfilename=|Data Directory|AdventureWorks.mdf;UserId=username;Password=passwordintegrated security=False;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> </connectionStrings>
μ΄λ κ² λ무 컀λ₯μ μ€νΈλ§ λΆλΆμ΄ λ무 κΈΈλ€λ³΄λ νλμ λ€μ΄μ€μ§λ μμ λΏλλ¬, μν©μ λ°λΌ μ μ νκ² μλ²κ° λ°λλ€κ±°λ λ°μ΄ν°λ² μ΄μ€κ° λ°λλ€κ±°λ νλ κ²½μ°μλ μμ νκΈ°κ° μ½μ§ μλ€. νμ§λ§, .edmx νμΌμ μ΄μ©ν΄ EFλ₯Ό ꡬμ±ν κ²½μ° μΈ κ°μ§μ μλ‘ λ€λ₯Έ μΈμλ₯Ό λ°μλ€μ΄λ μμ±μκ° μκΈ°λλ°, κ·Έμ€ νλλ μ΄ μ»€λ₯μ μ€νΈλ§μ μ μ°νκ² κ΅¬μ±ν μ μλ λ°©λ²μ μ μνλ€. μλλ .edmx νμΌμ μ΄μ©νμ¬ μμ±ν EF λ°μ΄ν° μ½ν μ€νΈμ μμ±μλ€μ΄λ€.
public partial class ApplicationDataContext : DbContext { // Initialises a new instance of the ApplicationDataContext object. public ApplicationDataContext() { ... } // Initialises a new instance of the ApplicationDataContext object // with the given connection string. public ApplicationDataContext(string connectionString) { ... } // Initialises a new instance of the ApplicationDataContext object // with the given entity connection instance. public ApplicationDataContext(EntityConnection conn) { ... } }
맨 μλ μμ±μλ₯Ό 보면 EntityConnection μΈμ€ν΄μ€λ₯Ό μΈμλ‘ λ°μ EF λ°μ΄ν° μ½ν μ€νΈλ₯Ό μμ±νλ κ²μ λ³Ό μ μλ€. λ°λ‘ μ΄ μμ±μλ₯Ό μ΄μ©νμ¬ μν©μ λ°λΌ μ μ°νκ² μ»€λ₯μ μ€νΈλ§μ μμ±ν μ μλ€. μλ μ½λλ μ΄ λ°©λ²μ μ΄μ©νλ ν μ€νΈ μΌμ΄μ€ λ©μλμ΄λ€.
[Test] [TestCase("serverName", "dbName", "username", "password", "System.Data.SqlClient", true)] public void TestDatabaseConnection_SendParameters_GetDatabaseConnected(string serverName, string dbName, string username, string password, string provider, bool connected) { var sqlBuilder = new SqlConnectionStringBuilder(); sqlBuilder.DataSource = serverName; sqlBuilder.InitialCatalog = dbName; sqlBuilder.Username = username; sqlBuilder.Password = password; sqlBuiler.IntegratedSecurity = false; var efBuilder = new EntityConnectionStringBuilder(); efBuilder.Provider = provider; efBuilder.ProviderConnectionString = sqlBuilder.ToString(); efBuilder.MetaData = String.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", "ApplicationDataContext"); using (var conn = new EntityConnection(efBuilder.ToString())) { conn.Open(); Assert.AreEqual(connected, conn.State == ConnectionState.Open); conn.Close(); } }
μμ μ½λμμ μ μ μλ€μνΌ,
SqlConnectionStringBuilder μΈμ€ν΄μ€λ₯Ό ν΅ν΄ κΈ°λ³Έμ μΈ μ»€λ₯μ μ€νΈλ§μ λ§λ€κ³ ,
κ·Έκ²μ λ€μ EntityConnectionStringBuilder μΈμ€ν΄μ€λ‘ ν λ² λ κ°μΈμ€ νμ,
μ΄κ²μ EntityConnection κ°μ²΄λ‘ λ³΄λ΄ λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ μ μμ±νλ€.
μ΄λ κ² λ§λ€μ΄μ§ EntityConnection μΈμ€ν΄μ€λ 맨 μμ ApplicationDataContext(EntityConnection conn) { ... } μμ±μμ μΈμλ‘ μ°μ¬ λ°μ΄ν°λ² μ΄μ€ νΈλμμ μ μν EF μΈμ€ν΄μ€ μ΄κΈ°νλ₯Ό κ°λ₯νκ² νλ€.
μμ ν μ€νΈ μ½λμμ μ μ μλ€μνΌ, web.config λλ app.config μ¬μ©μ κ΅³μ΄ κΈ°λκΈ΄ 컀λ₯μ μ€νΈλ§μ μ¬μ©νλ κ² λ³΄λ€λ μλ―Έμλ λ°μ΄ν° β μλ²λͺ , DBλͺ , μ μ λ€μ, ν¨μ€μλ λ± β λ₯Ό <appSettings> μΉμ μ λ£μ΄λκ³ κ·Έκ²μ μν©μ λ°λΌ κ°λ³μ μΌλ‘ νΈμΆνμ¬ μ»€λ₯μ μ λ§λλ κ²μ΄ κ°λ°μ κ΄μ μμλ λμ± μμν μΌμ΄ μλκΉ νλ€.
μ°Έμ‘°: EntityConnectionStringBuilder Class











