Entity Framework Z Plus 일괄 업데이트

entity-framework entity-framework-6 entity-framework-plus

문제

Entity Framework Z Plus 일괄 업데이트 메서드를 사용하고 있습니다. 아래 문제로 인해 진행할 수 없습니다. 사실 update 메소드는 tagName="amir1" 과 같은 정적 값을 줄 때 tagName="amir1" 합니다. 하지만 웹 서비스 또는 Tagdescription 를 기반으로하는 다른 컬렉션에서 tagId . Update 메서드는 확장 메서드 나 다른 메서드를 사용하여 요구 사항을 충족하지 못합니다.

"LINQ to Entities가 'System.String GetTagDescription (Int32)'메서드를 인식하지 못하고이 메서드를 저장소 식으로 변환 할 수 없습니다."

희망은 지금 내 요구 사항입니다. 내 요구 사항에 대한 다른 접근법이 있다면 저를 안내하십시오.

여기 내 코드가 있습니다 :

using (var context = new TrialsDBEntities())
{
     context.tblTags.Where(x => (tagIdCollection.Contains(x.tagId))).
                Update(m => new tblTag { tagDescription = m.tagId.GetTagDescription(), tagName = "amir1" });
}

public static string GetTagDescription(this int i)
{
     return "test" + i;

     ///Replace above line with call to database or web service call 
     getting some text by giving i as input
}

수락 된 답변

다음과 같이 코드를 작성하십시오.

using (var context = new TrialsDBEntities())
{
   var tagsToBeUpdated =  context.tblTags.Where(x => (tagIdCollection.Contains(x.tagId))).AsNoTracking().ToList();

   //Only use this code block if your tagsToBeUpdated list is too large
   Parallel.ForEach(tagsToBeUpdated, tagToBeUpdated =>
   {
      var tagDescription = GetTagDescription(tagToBeUpdated.tagId);
      tagToBeUpdated.tagDescription = tagDescription;
      context.Entry(tagToBeUpdated).State = EntityState.Modified;
   });

   //Only use this code block if your tagsToBeUpdated list is not too large
   foreach(var tagToBeUpdated in tagsToBeUpdated)
   {
      var tagDescription = GetTagDescription(tagToBeUpdated.tagId);
      tagToBeUpdated.tagDescription = tagDescription;
      context.Entry(tagToBeUpdated).State = EntityState.Modified;
   }

   context.SaveChanges();         
}

public static string GetTagDescription(int i)
{
     return "test" + i;

     ///Replace above line with call to database or web service call 
     //getting some text by giving i as input
}

전문가 답변

면책 조항 : 저는 Entity Framework Plus 프로젝트의 소유자입니다.

불행히도 BatchUpdate를 행마다 다른 값으로 변경하는 것은 불가능합니다.

면책 조항 : 저는 프로젝트 Entity Framework Extensions 의 소유자입니다.

이러한 상황에서 우리는 일반적으로 이런 종류의 상황에 대비하고 고성능 저장 작업을 제공하는 유료 라이브러리를 사용할 것을 권장합니다.

// Easiest way
context.BulkSaveChanges();

// Fastest way
context.BulkUpdate(tags);



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.