복붙노트

[SQL] 행의 예기치 않은 수의 영향을 저장 갱신, 삽입 또는 삭제 문 (0)에 대한 솔루션

SQL

행의 예기치 않은 수의 영향을 저장 갱신, 삽입 또는 삭제 문 (0)에 대한 솔루션

나는 예외가 사람들을위한 해결책을 발견 :

스토어 업데이트, 삽입 또는 삭제 문은 행의 예기치 않은 수 (0)에 영향을 미쳤다. 엔티티 수정이나 단체가로드 된 이후 삭제되었을 수 있습니다. ObjectStateManager 항목을 새로 고칩니다.

하지만, 어쨌든 나는 질문이 있습니다.

나는 주제를 읽기 : 엔티티 프레임 워크는 "스토어 업데이트, 삽입 또는 삭제 문은 행의 예기치 않은 수 (0)에 영향을 미쳤다." 에 VMAtm, 로버트 하비

해결법

  1. ==============================

    1.해결책:

    해결책:

    try {
        context.SaveChanges();
    } catch (OptimisticConcurrencyException) {
        context.Refresh(RefreshMode.ClientWins, db.Articles);
        context.SaveChanges();
    }
    
  2. ==============================

    2.그것의 더 나은 업데이트하여이 같은 방법 ..... 혹시 모든 addobject 및 DeleteObject 매크로 또는 수정 후 개체 컨텍스트의 savechange () 메서드를 호출 저장 :

    그것의 더 나은 업데이트하여이 같은 방법 ..... 혹시 모든 addobject 및 DeleteObject 매크로 또는 수정 후 개체 컨텍스트의 savechange () 메서드를 호출 저장 :

    public void Save(object entity)
    {
        using (var transaction = Connection.BeginTransaction())
        {
            try
            {
                SaveChanges();
                transaction.Commit();
             }
             catch (OptimisticConcurrencyException)
             {
                 if (ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Deleted || ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Modified)
                        this.Refresh(RefreshMode.StoreWins, entity);
                  else if (ObjectStateManager.GetObjectStateEntry(entity).State == EntityState.Added)
                        Detach(entity);
                  AcceptAllChanges(); 
                  transaction.Commit();
              }
    
        }
    }
    
  3. ==============================

    3.당신이 SET NOCOUNT ON이 때문이다. 항상 생성하는 EF SQL 문이의 절 추가 여기서 @@ ROWCOUNT> 0 [ID = SCOPE_IDENTITY () (예를 들면). 를 Where @@ ROWCOUNT> 0 절을 주목하라. 당신의 SET NOCOUNT ON 문을 벗고 그것을 작동합니다.

    당신이 SET NOCOUNT ON이 때문이다. 항상 생성하는 EF SQL 문이의 절 추가 여기서 @@ ROWCOUNT> 0 [ID = SCOPE_IDENTITY () (예를 들면). 를 Where @@ ROWCOUNT> 0 절을 주목하라. 당신의 SET NOCOUNT ON 문을 벗고 그것을 작동합니다.

  4. ==============================

    4.가능한 문제 : 당신은 제로가되기 위해 그 값을 발생하면 엔티티 키의 메타 데이터에 ReadOnlyAttribute를 배치

    가능한 문제 : 당신은 제로가되기 위해 그 값을 발생하면 엔티티 키의 메타 데이터에 ReadOnlyAttribute를 배치

     [DisplayName("Student ID")]
     [ReadOnly(true)]
     public int StudentID { get; set; }
    

    해결책: ReadOnlyAttribute를 제거

     [DisplayName("Student ID")]
     public int StudentID { get; set; }
    
  5. ==============================

    5.저도 같은 문제를 겪고,이 오류 메시지는 다소 당혹스러운 일이다. webtrifusion의 대답은 나를 도왔다. 참조 엔티티 프레임 워크는 "스토어 업데이트, 삽입 또는 삭제 문은 행의 예기치 않은 수 (0)에 영향을 미쳤다."

    저도 같은 문제를 겪고,이 오류 메시지는 다소 당혹스러운 일이다. webtrifusion의 대답은 나를 도왔다. 참조 엔티티 프레임 워크는 "스토어 업데이트, 삽입 또는 삭제 문은 행의 예기치 않은 수 (0)에 영향을 미쳤다."

    클라이언트 측에서 JSON에서 : 내가 "0 ID"를 추가하는 것을 잊었다 밝혀졌습니다.

  6. ==============================

    6.나는 저장소 패턴을 구현 수정에 InsertAsync 설정 EntityState했다. 디버깅 내가 발견되면 엔티티의 ID는 0이었다

    나는 저장소 패턴을 구현 수정에 InsertAsync 설정 EntityState했다. 디버깅 내가 발견되면 엔티티의 ID는 0이었다

        public async Task InsertAsync(T entity)
        {
    
            dbContext.Entry(entity).State = EntityState.Modified;
            await dbContext.SaveChangesAsync();
        }
    

    추가로 엔티티 상태 변경은 고정.

        dbContext.Entry(entity).State = EntityState.Added;
    
  7. ==============================

    7.난 내가 테이블과 증가 값을 설정에서 설정 한 기본 키를 잊어 버린 것을 깨달았다 다음과 같은 오류를했다 ...

    난 내가 테이블과 증가 값을 설정에서 설정 한 기본 키를 잊어 버린 것을 깨달았다 다음과 같은 오류를했다 ...

  8. ==============================

    8.내가 개체를 업데이트 할 때이 오류를 발견 및 .... 차 키 값을 전달 잊었

    내가 개체를 업데이트 할 때이 오류를 발견 및 .... 차 키 값을 전달 잊었

    법인은 기본 키와 참조 레코드를 업데이트 할 수 있도록

    해결 방법 : 기본 키 값이 주어진 레코드를 업데이트 통과인지 아닌지 확인 여부. :)

  9. ==============================

    9.내 경우에는, 필요 DatabaseGenerated 속성을 설정하는 경우 사용자 정의 코드 첫 번째 규칙

    내 경우에는, 필요 DatabaseGenerated 속성을 설정하는 경우 사용자 정의 코드 첫 번째 규칙

    public class Car
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int Id { get; set; }
        public string Model { get; set; }
        public DateTime Registered { get; set; }
    }
    

    또는

    modelBuilder.Entity<Department>().Property(t => t.DepartmentID)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    

    https://docs.microsoft.com/zh-tw/ef/ef6/modeling/code-first/conventions/custom 참조

    및 https://www.learnentityframeworkcore.com/configuration/data-annotation-attributes/databasegenerated-attribute

    및 https://docs.microsoft.com/zh-tw/ef/ef6/modeling/code-first/fluent/types-and-properties

  10. ==============================

    10.첫 번째 엔티티 프레임 워크 코드를 사용하여,

    첫 번째 엔티티 프레임 워크 코드를 사용하여,

    사용 (MyDbContext dB = 새로운 MyDbContext ()) {...

    사용하여 줄 끝이 추가 :

    db.Configuration.ValidateOnSaveEnabled = true;
    
  11. from https://stackoverflow.com/questions/6819813/solution-for-store-update-insert-or-delete-statement-affected-an-unexpected-n by cc-by-sa and MIT license