2008-10-14 1 views
2

내 SQL Server 테이블 중 하나에 매핑되는 새 개체를 만들 때 LINQ는 SubmitChanges를 호출 할 때 테이블에 새 레코드를 삽입합니다. 나는 이것을 막고 싶지만, 여전히 나의 새로운 물건이 필요합니다.Linq 및 SQL을 사용하는 동안 테이블에 새 레코드를 삽입하지 못하게하려면 어떻게합니까?

사용자 지정 메서드에 대해 알고 있지만 어쨌든이 동작을 사용하지 않도록 설정하여 기존 레코드를 업데이트하고 MyTableClass myObject = new MyTableClass()을 호출했는지 여부와 관계없이 새로운 레코드를 삽입하지 않습니다.

감사합니다.

+0

를 "새로운"그 자체로 아무것도하지 않습니다 ... 당신이 밖으로 갈 필요 것 컨텍스트에 첨부 (Attach/InsertOnSubmit)하는 방법 ...? –

답변

0

서버 측에서 방지 할 수 있습니까? 삽입 액세스 권한이없는 역할로 연결하십시오. 조만간 삽입물을 막는 가장 방탄적인 방법이 될 것 같습니다.

+0

우리는 windows auth를 사용하므로 삽입 할 수있는 하나의 응용 프로그램을 사용하지만 예를 들어 다른 응용 프로그램을 사용해서는 안됩니다. – HAdes

2

아무 것도하지 않고 삽입 역할에 할당 할 수있는 저장 프로 시저를 만들 수 있습니다 - 실제 해킹이지만 작업이 완료됩니다!

이 문제가 발생한다는 사실은이 객체를 참조하는 방식에 문제가 있다는 것을 나타냅니다.이 새로운 객체를 정확하게 사용해야하는 이유는 무엇입니까? 당신이 당신의 데이터 컨텍스트가 삽입에 발프하려면

2

, 당신은 할 수 있습니다 :

partial class DataClasses1DataContext 
{ 
    public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode) 
    { 
     if(GetChangeSet().Inserts.OfType<MyObject>().Any()) 
     { 
      throw new InvalidOperationException("No inserts!"); 
     } 
     base.SubmitChanges(failureMode); 
    } 
} 

어떤 좋은?

[: ] 간단히 첨부 할 수 있습니까? 예 : 첨부 (obj, false); 당신이 모델의 객체를 원하지 않는 경우

, 왜 데이터 컨텍스트에 추가?]

+0

아직 데이터를 검색하고 데이터를 업데이트 할 수 있어야하므로 삽입하지 않아도됩니다. – HAdes

+0

감사합니다. 그것은 내가 막기를 원하는 모든 삽입물이 아니라 단지 하나의 테이블입니다. 나는 당신의 Attach (obj, false)를 시도 할 것이지만, 내 모든 객체 주위에 datacontext를 전달해야 할 것입니다. 나는 그것을 좋아하지 않습니다. – HAdes

+0

당신은 분명히 할 수 있습니다 : 이것은 새로운/기존 기록에있는 아이입니까? –

관련 문제