Home Full Site
LINQ to Entities

Entity Framework (EF)에서 데이타를 추가,수정,삭제 그리고 쿼리하기 위해 흔히 LINQ를 사용하는데, 이러한 LINQ를 Linq to Entities라 부른다. 이렇게 LINQ를 사용하는 방법 이외에 EF에서 직접 SQL Query를 보낼 수도 있는데, 예를 들어 SELECT문 혹은 DML 문장들을 직접 보낼 수 있으며, 특히 Stored Procedure를 호출할 때 이러한 직접 Query 방식을 사용한다. 아래는 Entity Framework에서 LINQ를 사용하는 방법들에 대한 설명이다.



Entity Framework : INSERT

새 데이타 저장을 위해 먼저 Entity 클래스의 객체를 생성한 후 이를 (DbContext 안의) 해당 DbSet 객체에 추가하고, 마지막으로 DataContext 객체의 SaveChanges(혹은 비동기일 경우 SaveChangesAsync) 메서드를 호출하면 된다.

예제

var db = new MyDbContext();

var c = new Customer();
c.Name = user.Name;
c.Email = user.Email;
c.CreateDate = DateTime.Now;

db.Customers.Add(c);  // 추가
db.SaveChanges();     // 저장



Entity Framework : UPDATE

데이타를 UPDATE하기 위해서는 먼저 LINQ로 해당 레코드 객체를 가져온 후, 이 객체의 속성을 갱신하고 DataContext객체의 SubmitChanges() SaveChanges(혹은 비동기일 경우 SaveChangesAsync) 메서드를 호출하면 된다.

예제

var db = new MyDbContext();

var c = db.Customers.SingleOrDefault(p => p.Name == "Kim");

c.Email = "kim@test.com";  // 수정
c.Age = 20;

db.SaveChanges();     // 저장



Entity Framework : DELETE

데이타 삭제하기 위해서는 삭제할 레코드를 쿼리를 이용해 선별한 후 해당 DbSet 객체에서 해당 레코드를 제거한 후, SubmitChanges() SaveChanges(혹은 비동기일 경우 SaveChangesAsync) 메서드를 호출하여 서버에서 삭제한다. 만약 삭제할 레코드가 하나이면 DbSet의 Remove() 메서드를 사용하고, 복수이면 RemoveRange() 메서드를 사용한다.

예제

var db = new MyDbContext();

var c = db.Customers.SingleOrDefault(p => p.Name == "Kim");
if (c == null) return;

db.Customers.Remove(c);  // 삭제
// 복수일 경우: db.Customers.RemoveRange(clist);

db.SaveChanges();     // 저장



Entity Framework : SELECT

LINQ의 다양한 쿼리 방식을 사용하여 데이타를 SELECT할 수 있다. 아래 예제는 자주 사용되는 표현 중 일부를 예를 든 것으로, SingleOrDefault() 메서드는 특정 하나의 Row를 선별하기 위해 사용되고, FirstOrDefault()는 조건에 맞는 첫번째 row를 리턴한다. Where() 메서드는 필터 조건을 지정하기 위해 사용되고 Take(n)는 처음 n 개의 데이타 (TOP n)를 리턴한다. 또한, ORDER BY문을 사용하기 위해서는 오름차순의 OrderBy() 메서드 혹은 내림차순의 OrderByDescending() 메서드를 사용한다.

예제

var db = new MyDbContext();

// 이름이 Suzy인 고객 쿼리
var c = db.Customers.SingleOrDefault(p => p.Name == "Suzy");

// 이름이 Lee인 첫번째 레코드
var c = db.Customers.FirstOrDefault(p => p.Name == "Lee")

// 10대 고객 10명만
var c = db.Customers.Where(p => p.Age >= 10 && p.Age < 20).Take(10)

// 최연소자이면서 키가 가장 큰 고객
// (ORDER BY Age ASC, Height DESC)
var c = db.Customers.OrderBy(p => p.Age).ThenByDescending(p => p.Height).



© csharpstudy.com