컨트롤러에서 데이터베이스 개체를 다시 만드는 것이 가장 좋은 방법인지 생각해 보는 중 작업 중입니다.ASPNET MVC에서 모델 바인딩 데이터베이스 엔티티
ModelBinders를 사용하고 싶습니다. 따라서 식별자 매개 변수를 기반으로 데이터베이스에서 객체를 가져 오기 위해 코드를 반복하지 않고 매개 변수를 통해 객체에 액세스 할 수 있습니다. 그래서 ModelBinder가 데이터 액세스 레이어를 호출하여 원래의 객체를 얻거나 데이터베이스에 존재하지 않으면 새 객체를 생성 한 다음, 모든 속성을 데이터베이스 객체에 바인드하여 업데이트합니다. 그러나 나는 ModelBinders가 데이터베이스 쿼리 (첫 번째 코멘트는 article)를 만들어서는 안된다는 것을 읽었습니다.
ModelBinder가 데이터베이스 쿼리를 수행하지 않아야하므로 (DefaultModelBinder를 사용하는 경우) 다른 db 개체 인 속성을 가진 데이터베이스 개체는 어떻게됩니까? 이것들은 결코 할당되지 않을 것입니다.
사용자가 편집 한 객체를 저장하면 (보기에서 1 또는 2 개의 속성을 편집 할 수 있음) ModelBinded 객체에 데이터가 누락되어 그대로 저장하면 데이터베이스의 데이터가 유효하지 않은 값으로 덮어 쓰입니다 , 또는 NOT NULL 제약 조건이 실패합니다.
그렇다면 뷰에서 다시 게시 된 양식 데이터로 바인딩 된 데이터베이스에서 컨트롤러 작업의 개체를 가져 오는 가장 좋은 방법은 무엇입니까?
메신저는 NHibernate를 사용합니다.
나는 또한 당신과 똑같은 상황 (에있어 NH를 사용함). 코드 복제를 피하기 위해 모델 바인더를 구현했습니다. 바인더에서 DB에 액세스하는 방법에 대한 결론은 무엇입니까? –
결국 바인더에서 데이터베이스 액세스에 반대했습니다. 내보기 모델은 이제 내 도메인 모델과 구분됩니다. 도메인 모델에 직접 바인딩하는 데 문제가 있습니다 (nhibernate는 잘못된 데이터로 요청이 끝날 때 바인드 된 객체를 비 웁니다. 새 세션을 만들지 않고 이후에 객체를 다시 가져 오지 않으면 결국 요청 전체에서 유효하지 않은 바인드 된 객체). –
알려 주셔서 감사합니다. –