2009-06-08 5 views
0

일반 asp_user 테이블에 "settings"테이블을 추가 한 데이터 레이어에서 linq을 사용하여 SQL에 연결할 수 있습니다. 이 설정 테이블에서 나는 하나가 선호 단위 (Units 테이블에 대한 외래 키) 인 여러 레코드를 유지합니다.Linq to SQL 업데이트를 사용하면 중복 레코드가 생성됩니다.

이제이 선호 단위가 리터 단위에서 킬로그램 단위로 변경되어야 할 때 UnitService를 호출하여 정확한 단위 인스턴스를 가져오고 내 설정을 설정합니다.이 예에서는이 단위를 호출합니다. 이것은 데이터베이스에 새로운 (중복 된) 아이템을 만듭니다 (이제 Units 테이블에 2 킬로그램의 레코드가 있습니다). 이것은 물론 내가 의도 한 것이 아닙니다. 내가 AccountService.SaveuserSetting는 무엇입니까

UserSetting setting = AccountService.GetUserSetting(user.Identity.Name); 
if (setting.PreferedUnitId != unitId) 
    setting.Unit = UnitService.GetUnitById(unitId); 
AccountService.SaveuserSetting(setting); 

답변

1

아마도 DataContext.Units를 수행해야 할 수 있습니다. Attach (유닛)을 사용하여 유닛 오브젝트가 이미 존재하고 삽입 할 필요가 없다는 사실을 Linq가 SQL에 알릴 수 있습니다. Units 테이블이 DataContext의 Units 속성으로 노출되어 있다고 가정합니다.

저는 여기에서 추측하고 있지만, AccountService가 UnitService와는 다른 DataContext를 사용하고있어 실제로 분리 된 객체 시나리오에있는 것으로 보입니다. 이 blog post 일을 조금 더 명확하게 만들 수 있습니다.

+0

네, 맞습니다. 아마 그걸 고쳐 줄거야. –

1

잘못된 기본 잔뜩하고있어 느낌이

? 불필요한 InsertOnSubmit 일 가능성이 있습니다.

+0

예, 암시 적입니까? 내 변경 사항을 되돌려 야하고 커밋 안함을 결정하면 어떻게됩니까? –