2010-06-20 2 views
1

나는 조금 어리 석다. 나는 추론 할 수없는 이유는 다음 작품 :사후 편집 작업 - respository.save()가 데이터를 저장하는 이유는 무엇입니까?

샘플은 dinnerRepository.Save는()로 정의된다 스콧 오클라호마의 NerdDinner 연습에서 가져옵니다
AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, FormCollection formValues) { 
     Dinner dinner = dinnerRepository.GetDinner(id); 
     UpdateModel(dinner); 
     dinnerRepository.Save(); 
     return RedirectToAction("Details", new { id = dinner.DinnerID }); 
    } 

:

public void Save() { 
    db.SubmitChanges(); 
} 

그리고 dinnerRepository.GetDinner (ID

public Dinner GetDinner(int id) { 
    return db.Dinners.SingleOrDefault(d => d.DinnerID == id); 
} 

즉, 어떻게 DB를 NerdDinnerDataContext는 "알고"않습니다 저녁 식사 객체를 저장할 다음과 같이) 정의?

Linq에 대한 이해를 돕기 위해 SQL에 구멍이 있어야하지만 핀을 꽂을 수 있다면 불어 넣을 수 있습니다. 좋습니다. 저녁 개체에는 ID가 있지만 그 ID가있는 특정 레코드에 대한 변경 사항이 있다는 것을 db에 알려주는 것은 무엇입니까?

나는 그것을 볼 수 없다. 월드컵이되어야합니다 ...

나는 DataContext 개체 db가 GetDinner 메서드 호출을 사용하여 얻은 저녁 식사 개체에 대한 참조를 유지한다고 생각할 수 있습니다. 하지만 ... 그것은 모두 당신이 (이 기억하지 않습니다 ... Linq2SQL 또는 엔티티 프레임 워크 중 하나입니다) 그것이 ORM 층에 의해 처리됩니다 생각으로

앤드류

답변

0

LINQ to SQL 클래스에 대해 생성 된 코드를 살펴 봐야합니다. 클래스의 속성 setter 및 getter가 변경 사항을 포함하고 있음을 알 수 있습니다. 추적을 사용하여 다음에 리포지토리가 저장 될 때 적절한 SQL 문을 생성하여 개체가 만든 모든 변경 내용을 커밋합니다.

0

약간의 '마법'을 느낀다. ORM 계층에서 관리중인 개체의 변경 내용을 추적하는 것은 흔한 일이며 변경된 개체가 db.Dinners.SingleOrDefault() 호출을 통해 ORM 계층에서 검색 되었기 때문에 ORM은 해당 개체에 대한 변경 내용을 추적하므로 해당 개체가 변경되었음을 알 수 있습니다. SubmitChanges에 전화 할 때 변경되었습니다. 모두 ORM의 마법의 일부입니다.

+0

변경 사항이있는 업데이트 된 레코드로 사용할 개체를 어떻게 알 수 있습니까? , 생성 된 객체에 대한 참조를 유지합니다. 그 속성들을 볼 것입니다. 분명히 LINQ To SQL은 내가 생각했던 것보다 더 많은 일을합니다. 이것의 맨 아래로 가야 할 것입니다. 여러분 모두에게 많은 감사를드립니다. 사람은 비스킷을 가져야 만합니다. 그래서 먼저 대답 한 야곱에게 상을 줄 것입니다. – awrigley

+0

Linq2Sql이 어떻게 동작하는지에 대한 자세한 내용은 잘 모르겠습니다. 코드를 파헤쳐서 찾지 못할 수도 있습니다. 당신이 관심이 있다면 NHibernate는 또한 데이터베이스에서 어떤 객체를 가져 왔는지, 새로 생성 된 객체와 그 객체들에 발생한 모든 변경 사항을 추적합니다 (동적 프록시와 같은 것을 사용합니다). NHibernate 소스 코드를 검토하고 그 특정 문제를 해결하는 방법이 무엇인지 살펴 보는 것이 흥미로울 수 있습니다. – ckramer

+0

제가 조사하고 있습니다. 그렇습니다. datacontext 인스턴스는 범위 내에있는 동안 검색 한 데이터를 추적합니다. 이것은 내 이해의 큰 구멍이었고 그것을 채워 넣어야했습니다. 참조가 어떻게 작동하는지 정확하게 파악할 필요가 있습니다. – awrigley

관련 문제