2010-02-22 2 views
0

찾고 ...이 LINQ 저장 함수를 사용할 수 있습니까? (이 같은 공유 INSERT/UPDATE 로직을 가지고?) 내가 WPF 새로운 오전 정말 일을하는 '올바른 방법'과 사투를 벌인 피드백

public void Save(CompanyContact entityToSave) 
{ 
    try 
    { 

    var saveEntity = (from cc in db.CompanyContacts 
     where cc.CompanyContactId == entityToSave.CompanyContactId 
     select cc).SingleOrDefault(); 

    if (saveEntity == null) 
    { 
     //INSERT logic      
     entityToSave.CreatedById = new CompanyPersonRepository().GetCompanyPerson(DataContext.Default.LoginUsername).CompanyPersonId; 
     entityToSave.ModifiedById = entityToSave.CreatedById; 

     db.CompanyContacts.InsertOnSubmit(entityToSave); 
     db.CompanyContacts.Context.SubmitChanges(); 
    } 
    else 
    { 
     //UPDATE logic    
     saveEntity.ModifiedById = new CompanyPersonRepository().GetCompanyPerson(DataContext.Default.LoginUsername).CompanyPersonId; 
     saveEntity.CompanyId = entityToSave.Company.CompanyId; 
     saveEntity.FirstName = entityToSave.FirstName; 
     saveEntity.LastName = entityToSave.LastName; 
     saveEntity.CompanyContactTypeId = entityToSave.CompanyContactTypeId; 

     db.CompanyContacts.Context.SubmitChanges(); 

    } 

...

그렇지 않은 경우 몇 가지 의견을 제공해 주시겠습니까? 아니면 올바른 경로에 있지 않은 경우 LINQ 기능을 작성하는 더 좋은 방법을 제공 할 수 있습니까?

답변

0

그럴 수 있습니다. 형식으로 레코드를 변수로 저장할 수도 있고 null 인 경우 레코드가 존재하지 않지만 업데이트가있는 경우 업데이트가 수행되어야합니다. 이렇게하면 쿼리를 최소화 할 수 있으며 두 개를 처리하는 대신 하나의 객체에 양식 값을 할당 할 수 있습니다.

또는 LINQ 개체를 폼에 바인딩하면 INotifyPropertyChanged가 구현되므로 양식 내에서 바인딩을 설정하고 개체를 datacontext로 할당하면 변경 내용이 즉시 개체에 바인딩됩니다.

HTH. 의견에 대한

+0

감사합니다 ... 그래서 당신이 나를 위해 몇 가지 문제에 도움이 되거 수 있기를 바랍니다이 정말 새로운 여전히 이니 는 데이터베이스 규칙의 위반이있는 경우 어떻게해야합니까? 내 질문은 여기에 게시 대답 때이 문제를 확인 : http://stackoverflow.com/questions/2300159/wpf-binding-issue-unique-constraint-violation-on-update-how-to-reject-changes 데이터베이스 규칙 위반시 SqlException 및 Refresh 개체 컬렉션을 catch 할 필요가 없도록 LINQ에 제공 할 수있는 설정 값이 있습니까? DB 규칙을 catch하고 처리 할 코드를 작성해야하는 것처럼 보입니다. 위반 ... – Skyguard

+1

헤이 글쎄 내가 과거에 한 일은 각 LINQ 열에 [Column()] 정의 (ColumnAttribute 유형)가 있으므로 리플렉션을 사용하여 필드를 당겨 길이, 유형 , null 허용 여부 등 ... 해당 경로로 이동하고 싶지 않은 경우 해당 오류의 사용자를 저장하고 플래그를 지정하기 전에 사용자 정의 유효성 검사를 설정할 수 있습니다. 그 외, 예, 예외를 잡아야합니다. 내가하는 일은 그 요청만을위한 컨텍스트를 생성하고, 오류가 발생하면 저장을 시도하고, 사용자에게 알리고 컨텍스트가 종료되도록하십시오. –

+1

계속 ... 그런 식으로, 다시 저장하려면 개체를 재구성하고 중단 한 부분에서 작업하십시오. 결국 양식에는 여전히 기본 데이터가 있습니다. –