2011-03-09 3 views
0

EF 4에서 엔티티를 어떻게 업데이트합니까? 예를 들어Entity Framework 업데이트 중?

:

1) 사용 AutoMapper는 서비스 계층에서 카테고리 엔티티에서 CategoryEditModel를 생성합니다.

2) EditModel을보기로 전달하십시오. 큰!!

3) EditModel을 다시 게시하고 AutoMapper를 사용하여 CategoryEditModel -> Category를 가져옵니다.

4) 해당 범주를 가져 와서 서비스 계층으로 전달하여 리포지토리에 전달합니다.이 계층에서 다시 ObjectSet.Attach (TEntity)를 수행합니다.

ObjectStateManager에 동일한 키를 가진 다른 개체가 있다고 알려 줍니까 ???

나는 Ninject를 사용하여 Controller와 UnitOfWork, UnitOfWork가있는 Service, Repository가있는 Service, UnitOfWork가있는 저장소를 주입하고 있습니다. UnitOfWork는 요청 당 범위가 지정됩니다.

아마도 캐시에 뭔가가 보관되어있는 것 같습니다.

UOW에서 처리해야하거나 Ninject가 처리합니까? 그것은 IDisposable을 구현하고 처분에서 문맥을 폐기합니다.

+0

HTTP 요청 당 컨텍스트 범위를 지정하고 있습니까? IDoabaseFactory 구현을 만들어 UoW 및 저장소에 대한 DatabaseContext를 가져 왔습니까? – Paul

+0

@ Paul - 매핑 끝에 .InRequest가 있습니다. IDatabaseFactory? 나는 그것이 무엇인지 모른다. – Sam

+0

일반적으로 IDatabaseFactory는 MyContext Get() 메서드 하나로 만듭니다. IRepository 및 IUnitOfWork는 IDatabaseFactory Get 메서드를 사용하여 현재 컨텍스트를 가져옵니다. 이 클래스는 또한 IDisposable을 구현합니다. 여기에 샘플 구현을 확인하십시오. http://stackoverflow.com/questions/4442828/entity-framework-4-ctp-4-ctp-5-generic-repository-pattern-and-unit-testable/4458250#4458250 – Paul

답변

0

엔티티 컨텍스트 캐시 개체. 일반적으로 특정 상황의 수명을 상당히 짧게 유지하는 것이 좋습니다. 당신이 하나의 컨텍스트 당 요청 모델을 따르는 것인지 확실히 어떤 경우

public SomeObject GetSomeObjectById(int id) 
{ 
    using (var context = _contextFactory.Get()) 
    { 
     return context.SomeObjects.SelectSingle(o => o.Id == id); 
    } 
} 

, 당신은 당신이 원하는 개체를로드해야합니다 : I는 각 저장소 메소드 내 공장을 사용하여이 작업을 수행 (이 경우 캐시 된 것처럼 들리므로 context.GetObjectByKey을 사용하면 무료 이어야합니다.) 개체의 값을 변경 한 다음 변경 사항을 저장하십시오.

+0

하나의 컨트롤러 작업에서 여러 서비스/리포지토리를 사용하여 동일한 컨텍스트에서 작동하도록하는 방법은 무엇입니까? – Sam

+0

@ Sam Striano : 모두 같은 맥락에서 작동하지는 않습니다.코드에서 알 수 있듯이 저장소 메소드가 호출 될 때마다 컨텍스트를 작성하고 삭제합니다. – StriplingWarrior

0

리포지토리가 없으면 하나의 Entity Framework 세션 개체 만 사용해야한다고 생각합니다. 이 게시물을보십시오 : Question about Interfaces and DI? 그리고 질문이 있으면 알려주십시오. 그것은 코드 우선이며 완벽하게 작동합니다.

희망은 당신을 돕는다!

+0

리포지토리 또는 서비스 계층이 전혀 없습니까? 귀하의 컨트롤러에 이러한 각각의 요청 중 하나가 주입됩니까? – Sam

+0

세션 객체 마녀가 강하게 입력 된 것은 아니며, 코드 플렉스의 MVC 시작 사이트를 살펴보십시오. http://mvcstarter.codeplex.com/ 올바른 방법으로 시작하는 데 많은 도움이됩니다. 내 컨트롤러에 ISession 개체가 주입되면 LINQ를 사용하여 데이터베이스에서 원하는 모든 작업을 수행 할 수 있습니다. _session .Where (x => x.Name == "Vinny"), 변경 작업을 수행하고 _session.CommitChanges (). – VinnyG