2014-04-08 3 views
0

모범 사례에 대한 조언 찾기엔티티 프레임 워크 단일 줄 CRUD

아주 자주 ASP.NET 응용 프로그램에서 단일 레코드에 대해 CRUD 작업을 수행해야합니다.

삭제

, 좀 EF와 저장소 패턴 직원 (특히 Here)을 읽은 후

new context().myTable.Find(myID).Remove(); 

같은 일에 대해 생각

var myRecord = context.myTable.Find(myID); 
if (myRecord != null) 
{ 
    context.myTable.Remove(myRecord); 
    context.SaveChanges(); 
} 

같이하고 있었는데, 나는 일반적인 저장소의 도움으로 이해 , 적어도 할 수있다 :

class UnitOfWork 
{ 
    void RemoveRecord(myRecord) 
    { 
     var context = FindMyContext(myRecord); //[here](http://blogs.msdn.com/b/alexj/archive/2009/06/08/tip-24-how-to-get-the-objectcontext-from-an-entity.aspx) 
     context.Entry(myRecord).State = EntityState.Deleted; 
     context.SaveChanges(); 
    } 
} 

그리고 나는 그것을 사용할 수있다. 내 코드에서와 같이 :

new UnitOfWork.RemoveRecord(myRecord); 

이 것이 좋은 생각입니까?

+0

하나의 문제는 컨텍스트를 수행하고 싶지 않을 수 있다는 것입니다.이 컨텍스트에 대해 계속 진행되는 다른 작업이있을 수 있으므로 저장하지 말아야합니다. – Yiping

+1

[this] (https : // www. youtube.com/watch?v=QwwfTWMrM9k), 그것은 Unit Of Work 주제에 많은 도움이되었습니다. 이것에 관한 것은 당신이 정말로 추가 작업을 할 필요가 있는지 없는지에 관한 것입니다. 그리고 그 모든 작업은 당신이 작업하고있는 프로젝트가 얼마나 큰지에 달려 있습니다. – GregoryHouseMD

+0

질문을 올바르게 이해하면 TransactionScope를 사용하여 업데이트를 제어 할 수 있습니다. http://msdn.microsoft.com/en-us/library/vstudio/bb738523(v=vs.100).aspx – Haroon

답변

2

먼저 엔티티 프레임 워크 맨 위에 저장소와 작업 단위 패턴의 부가 가치가 무엇인지 스스로에게 물어보십시오.

엔티티 프레임 워크의 상황은 이미 작업 단위이며, 이미 는 저장소입니다, 왜 또 다른 하나를 만들어?

또한 필요할 때부터 가능한 한 빨리 컨텍스트를 만들어야합니다. 귀하의 서비스 운영은 다음과 같을 수 있습니다 :

public void RemoveCustomer(int customerId) 
{ 
     using(var context = new MyDbContext()) 
     { 
      var customer = context.Customers.SingleOrDefault(c => c.Id == customerId); 
      if (customer==null) throw new BusinessException("Customer does not exist"); 
      context.Customers.Remove(customer);  
      context.SaveChanges(); 
     } 
} 

개인적으로 저는이 컨텍스트에 StructureMap과 같은 IoC 프레임 워크를 주입합니다.