LINQ 데이터베이스 액세스 라이브러리를 사용해 DB연결
지난 시간에 T4 텍스트 템플릿을 사용해서 DB에 있는 스키마 들을 C# 클래스 형태로 생성해보았습니다.
2023.01.26 - [인생은 실전/C#] - [LinqToDB] LinqToDB - ① : T4 텍스트 템플릿을 사용해서 C# POCO 개체 생성하기
오늘은 LINQ 데이터베이스 액세스 라이브러리(LinqToDB)를 사용해서 데이터베이스에 아주 간단히 연결하는 과정을 알아보도록 하겠습니다.
1. LinqToDB 사전 구성
1️⃣ app.config에 데이터베이스 연결 문자열 입력
<configuration>
<connectionStrings>
<add name="DOMAIN" connectionString="Data Source=localhost;Initial Catalog=AdventureWorks2019;User ID=sa;Password=1" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
위와 같이 app.config에 <connectionStrings> 태그 아래 데이터베이스 연결 문자열을 입력해 줍니다.
2️⃣ DBSetting.cs 클래스 생성 및 구성
① 지시문(using)
LinqToDB의 Configuration과 Data 네임스페이스를 외부 참조한다.
using LinqToDB.Configuration;
using LinqToDB.Data;
② DBSetting.cs 전문
namespace LinqToDB.Database
{
public class DBSetting
{
public DBSetting(string connectionString)
{
DataConnection.DefaultSettings = new MySettings(connectionString);
}
public class ConnectionStringSettings : IConnectionStringSettings
{
public string ConnectionString { get; set; }
public string Name { get; set; }
public string ProviderName { get; set; }
public bool IsGlobal => false;
}
public class MySettings : ILinqToDBSettings
{
private string connectionString;
public MySettings(string connectionString)
{
this.connectionString = connectionString;
}
public IEnumerable<IDataProviderSettings> DataProviders
=> Enumerable.Empty<IDataProviderSettings>();
public string DefaultConfiguration => "System.Data.SqlClient";
public string DefaultDataProvider => "System.Data.SqlClient";
public IEnumerable<IConnectionStringSettings> ConnectionStrings
{
get
{
yield return
new ConnectionStringSettings
{
Name = "AdventureWorks2019",
ProviderName = "System.Data.SqlClient",
ConnectionString =
connectionString
};
}
}
}
}
}
DBSetting의 생성자를 통해 해당 객체를 새로 만들때 인자로 데이터베이스 연결 문자열을 지정합니다.
(프로젝트의 시작지점에서 일반적으로 DBSetting 객체를 생성해서 데이터베이스의 연결 문자열을 Default값으로 지정해줍니다.)
③ DBSetting의 내부 클래스중에 첫번째인 ConnectionStringSettings
해당 클래스는 IConnectionStringSettings 인터페이스를 상속받아서 DB연결에 사용되는 문자열 관련 인자들을 프로퍼티 형태로 만들어 둡니다. 해당 인터페이스를 상속받으면 VisualStudio의 intellisense기능을 사용해 쉽게 프로퍼티 형태로 만들 수 있습니다.(단축키 : Ctrl + . )
④ DBSetting의 내부 클래스중에 두번째인 MySettings
해당 클래스는 ILinqToDBSettings 인터페이스를 상속받습니다. 해당 인터페이스를 상속받으면 내부 멤버들이 만들어 지는데 여기서 public IEnumerable<IConnectionStringSettings> ConnectionStrings만 사용합니다. (나머지 3개의 멤버들에 대해선 사용하지 않는다고 코드조차 안만들어두면 인터페이스 멤버 구현 오류로 실행이 안되니 위와 동일하게 코드 작성은 해둡시다 👍😁)
✅ 추후 DB에 연결할때 위 ConnectionStrings 메서드에 접근해서 ConnectionString 프로퍼티를 Get해서 사용하게 됩니다. 중단점을 이용해 디버그를 해보면 db에 접근할때마다 본 메서드가 호출되는 것을 알 수 있습니다.
2. LinqToDB를 사용해 DB 연결
1️⃣ 데이터베이스 연결
public MainWindow()
{
InitializeComponent();
var connectionString = ConfigurationManager.ConnectionStrings["DOMAIN"].ConnectionString;
DBSetting dBSetting = new DBSetting(connectionString);
this.Loaded +=MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
using (var db = new AdventureWorks2019DB())
{
db.AddressTypes.ToList();
}
}
해당 Form(여기서는 WPF이기 때문에 window)이 로드되기 전에 app.config에 있는 "DOMAIN"이란 이름의 ConnectionString을 불러와서 DBSetting 생성자의 인자값으로 전달합니다.
데이터베이스에 연결하는 방법은 간단합니다.
using(var db = new AdventureWorks2019DB())를 사용하면 해당 DB에 접근하게 됩니다.
using문을 사용함으로써 DB 리소스에 액세스하고 다시 자동으로 해당 리소스를 반납시켜줌으로써 리소스 관리를 쉽게 도와줍니다.(db나 file 등에 접근할때 using문을 사용하는것을 생활화 합시다!!😁)
AdventureWorks2019DB()는 지난시간에 T4 템플릿으로 만든 C# POCO개체의 CLASS의 생성자입니다.
위의 사진과 같이 MSSQL에 있는 Person.AddressType 테이블과 POCO 개체의 AddressType과 데이터가 동일함을 알 수있습니다.(POCO 개체는 DB에 있는 스키마의 정보만을 저장하고 이를 통해 특정 스키마에 접근하는것 같아 보입니다.🤔)
댓글