2009-04-10 4 views
20

내가 (물론 기본 키) 식별 컬럼의 RequestID가는 기본 키

HelpdeskLog logEntry = new HelpdeskLog { RequestBody = message.Body }; 
    if (attachment != null) 
     logEntry.Attachments = Helper.StreamToByteArray(attachment.ContentStream); 
    Database.HelpdeskLogs.InsertOnSubmit(logEntry); 
을 갖는 테이블에 행을 삽입하려고했는데이 없기 때문에 표에 대한 작업을 생성, 업데이트 또는 삭제를 수행 할 수 없습니다

하지만 내 코드는 필연적으로 오류 다음 발생

업데이트를 작성하거나 기본 키가 없기 때문에 테이블에 삭제 작업을 수행 할 수 없습니다. 기본 키 열에도 불구하고

내가 뭘하려고 무엇 그것은 참으로

존재합니다

  1. ID 열 값이 개체 모델에 삽입되는 디버거에서 찾으십시오. 0
  2. 테이블에 가짜 값을 수동으로 삽입하려면 - 정상적으로 ID 값이 생성됩니다.
  3. SQLMetal이 테이블 맵을 올바르게 생성했는지 확인하려면 다음을 수행하십시오. 모든 기본 키 속성이 올바르게 생성되었습니다.

그럼에도 불구하고 두 가지 방법 모두 도움이되지 않았습니다. 그 트릭은 뭐니?

답변

3

테이블에 SQL Server의 기본 키가 있으므로 linq2sql 디자이너에서 테이블을 다시 추가하십시오.

그렇지 않은 경우 디자이너에서 직접 기본 키의 일부인 속성을 구성 할 수 있습니다.

4

테이블을 삭제 한 다음 다시 삽입하십시오. 이렇게하기 전에 필드 옆에 작은 작은 키가 있는지 확인해야합니다. 프로젝트를 다시 컴파일하면 문제가 해결됩니다.

당신이 데이터베이스를 업데이트했다고해서 DBML 파일이 자동으로 업데이트된다는 것을 의미하지는 않습니다. 미안.

29

나는 또한 내 C# 코드에서 와서이 문제를했고, 나는 IsPrimaryKey 지정 잊었다 실현했습니다이에,

[Table (Name = "MySessionEntries")] 
    public class SessionEntry 
    { 
    [Column(IsPrimaryKey=true)] // <---- like this 
    public Guid SessionId { get; set; } 
    [Column] 
    public Guid UserId { get; set; } 
    [Column] 
    public DateTime Created { get; set; } 
    [Column] 
    public DateTime LastAccess { get; set; } 
    } 

이 심지어 데이터베이스 테이블 (MySessionEntries 경우 필요하다 case)는 기본 키가 이미 정의되어 있습니다. Linq2sql 도구를 사용하여 데이터베이스 정의를 Visual Studio로 가져 오지 않으면 Linq이 자동으로 사실을 찾지 못하기 때문에 기본 키가 이미 정의되어 있습니다.

+2

고마워요! 내 코드는 조금 다른 듯했지만 주체가 같은 '이었다 [글로벌 :: System.Data.Linq.Mapping.ColumnAttribute (저장 = "_ ID", DbType과 = "고유 식별자 NOT NULL은"IsPrimaryKey = true로)]'했던 장난. –