2008-10-09 4 views
2

데이터베이스에 LINQ to SQL을 사용하여 검색하는 테이블이 있는데,이 목록에 추가하려는 처리 중 일부로 새 항목 + 모든 변경 내용으로 데이터베이스를 업데이트합니다. (. 즉, SQL 업데이트)Linq to SQL 목록을 어떻게 추가합니까?

var list = (from item in db.Table 
      select item).ToList(); 

[do processing where I modify items & add to the list] 

list = list.Distinct(); 

db.SubmitChanges(); 

무엇 발생하면 수정 happed 것입니다하지만 목록에 추가 한 새 항목이 추가되지 않은 : 나는 내가 할 수있는 생각은 무엇

이 있었다.

분명히 내가 잘못하고 있는데, 수정하는 올바른 방법은 무엇입니까 & DB 엔터티 목록에 추가 한 다음 모든 업데이트를 적용하십시오 & 삽입 하시겠습니까?

답변

5

목록은 의미가 없습니다. DataContext가 알고있는 객체를 보유하는 것입니다. 우리는 DataContext가 새로운 것에 대해 알고 있는지 확인해야한다. 사용하여, 당신은 제출에 새로운 행을 삽입 LINQ에게있어

Item item; 
if (needNewOne) 
{ 
    item = new Item(); 
    db.InsertOnSubmit(item); 
} 
else 
{ 
    item = list[i]; 
} 
/// build new or modify existing item 
/// : 
db.SubmitChanges(); 
1

InsertOnSubmit을 통해 새 항목을 추가해야합니다.

+0

그래, 내가 insertonsubmit에 대해 알고 동일한 목록에 삽입 및 업데이트하기 –

1

InsertOnSubmit : 중요한 것은 그들은 우리가 그들에게 DataContext에 경고 완료되면 필요가 없다는 점입니다

db.InsertOnSubmit(newrow); 
db.SubmitChanges(); 

새 DataContext는 필요하지 않습니다. 사용중인 업데이트를 사용하여 업데이트 할 수 있습니다.

삭제와 동일 DeleteOnSubmit (행). 그러나 수정 사항은 추적됩니다.

static void EnsureInsertedOnSubmit<TEntity>(this Table<TEntity> table 
              ,IEnumerable<TEntity> entities) 
{ foreach(var entity in entities) 
    { if ( table.GetModifiedMembers(entity).Length == 0  
      && table.GetOriginalEntityState(entity) == default(TEntity)) 
     { table.InsertOnSubmit(entity); 
     } 
    } 
} 

을 그리고 당신이 수행 할 수 있습니다 :

3

당신은 그것을 확장 방법을 만들 수 있습니다 내가 좀 더 우아한 방법이 있었다 기대했다,

var list = db.Table1.ToList(); 
list.Add(new Item()); 
db.Table1.EnsureInsertedOnSubmit(list); 
db.SubmitChanges();