2011-10-14 2 views
0

내가 그것을 업데이트해야 할 때 항상 행을 복제 한 개체가 업데이트 경우 행을 복제 :Linq를하려면 SQL은

protected static Task RegisterToDisc(Task task) 
    {   
     try 
     { 
      using (DataContext context = new DataContext()) 
      { 
       //this will print an actual existing id from the db 
       _log.Debug(task.ID); 

       context.Tasks.InsertOnSubmit(task); 
       context.SubmitChanges(); 
      } 
     } 
     catch(Exception e) 
     { 
      //... 
     } 
     return task; 
    } 

을 내가 저장하기 전에 ID를 인쇄 할 때를, 실제로 밖으로 인쇄하는 id는 실제로 db에 있습니다.

테이블 경우 : task 이미 데이터베이스에서오고

CREATE TABLE [dbo].[TaskSet](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [Message] [nvarchar](max) NOT NULL, 
    [Result] [nvarchar](max) NOT NULL, 
    [Status] [int] NOT NULL, 
    [Priority] [int] NOT NULL, 
    [Name] [nvarchar](max) NOT NULL, 
    [DateTimeAsked] [datetime] NOT NULL, 
    [DateTimePerfomed] [datetime] NOT NULL, 
    [SessionID] [nvarchar](max) NOT NULL, 
CONSTRAINT [PK_TaskSet] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

편집, task.ID이있는 number LINQ에이를 삽입하는 방법을 제공, 데이터베이스에 존재 포함 엔티티가 PK가 아니고 이미 db에있는 엔티티.

(최대 절전 모드) context.insertOrUpdate(task);으로 이동하면 기본 키로 수행 할 작업을 결정합니다.

+0

이 방법에 도착하기 전에 오는 "작업"은 어디입니까? – Frederiek

+0

@Frederiek - 편집을 참조하십시오. 감사합니다 – SexyMF

답변

1

InsertOnSubmit은 항상 삽입 대상을 표시합니다. 당신이 개체를 업데이 트하려는 경우 같은 데이터베이스에서 읽을 필요가

var objToUpdate = context.Tasks.SingleOrDefault(x=>x.Id == Id); 
objToUpdate.Property1 = "updated value"; 
objToUpdate.Property2 = "updated value"; 
//do it for all properties that need updating 
context.SubmitChanges();//since the object is tracked by context it will automatically generate sql to reflect update in db 
+0

고마워,하지만 난 이미 DB에서오고있어, 제 편집을 참조하십시오. – SexyMF

+1

작업이 db에서 오는 경우 'context.SubmitChanges'를 호출하면됩니다. 그러나 여기서는 객체 업데이트를 시도 할 때 새 데이터 컨텍스트를 인스턴스화하기 때문에 아무런 문제가 없습니다. 흐름은 다음과 같습니다. 컨텍스트에서 개체를 가져 와서 변경 한 다음 db에서 개체를 가져 오는 데 사용 된 ** 동일한 컨텍스트 **에서 SubmitChanges를 호출합니다. –

+0

감사합니다. 컨텍스트로 매개 변수를 보냈습니다. – SexyMF