2014-09-19 3 views
1

엔티티 프레임 워크 업데이트를 실패

public partial class Datagrid 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Location { get; set; } 
     public Nullable<bool> IsChecked { get; set; } 
    } 



public partial class SampleDbContext : DbContext 
    { 
     public SampleDbContext() 
      : base("name=SampleDbContext") 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 

     public virtual DbSet<Datagrid> Datagrids { get; set; } 
    } 

내가 한 줄에 체크 박스를 포함하는 목록보기가 어디 WPF 응용 프로그램을 다음과 같이 내가 엔티티 프레임 워크에 의해 생성 된 클래스가 있습니다. 나는 buttonclick에 체크 박스의 값을 얻기위한 코드를 작성했다. 확인란을 선택한 값으로 데이터베이스를 업데이트하려고하면 아무 작업도 수행하지 않습니다. 제발 도와주세요 .. 코드의 일부를 강조해라. 체크 상자의 모든 선택이 잘 작동한다. 나는 프론트 엔드의 체크 박스에서 사용자가 체크하는 값으로 데이터베이스의 Ischecked 값을 업데이트하기를 원한다. 그래서 모든

try 
     { 
      int i = 0; 
      IEnumerable<CheckBox> myBoxes = FindVisualChildren<CheckBox>(this); 
      foreach (CheckBox cb in myBoxes) 
      { 
       Datagrid dg = db.Datagrids.ToList()[i]; 
       dg.Id=dg.Id; 
       dg.Name = dg.Name; 
       dg.Location = dg.Location; 
       dg.IsChecked = cb.IsChecked; 
       db.Datagrids.Add(dg); 
       db.SaveChanges(); 

       i++; 
      } 
     } 
     catch (Exception ex) 

     { 
      MessageBox.Show(ex.Message); 
     } 
} 
+0

:

db.Entry(dg).State = System.Data.EntityState.Added; 

대신 :이 줄을 넣어? 어쩌면 web.config의 연결 문자열이 실수로 다른 데이터베이스/인스턴스를 가리키고 있을까요? 그것은 나에게 많이 일어난다. – ilans

+0

데이터베이스에서 값을 업데이트하려고하지만 값을 가져오고 업데이트 대신 엔티티를 생성/삽입하도록 표시하는 .Add를 사용하는 것보다 실제로 코드가 의미를 갖지 않습니다. –

+0

db.Datagrids.ToList() [i]를 사용하여 데이터베이스에 uneccesary querys를 수행하고 있기 때문에 코드가 빠르다는 또 다른 문제는이 행이 먼저 datatable Datagrid에서 모든 항목을 가져 오지만 특정 인덱스에서만 interessted 인 것입니다. EF에 대한 자습서를 읽는 것이 올바른 방법입니다. –

답변

0

먼저 .. 유효성 검사 오류를 방지하기 DG를 assinging하고,이 라인은 의심스러운 :

dg.Id=dg.Id; 

을 내가 그냥 오타 같아요. 그렇다면 질문에 실제 코드 줄을 넣는 것이 좋습니다.

문제가 아니라면 id 필드에 키 속성을 설정해보십시오 (자신의 ID가 필요한 경우에도 시도해보십시오. 문제가 해결 되었다면 문제를 해결할 수있는 출발점이됩니다) :

[Key] 
public int Id { get; set; } 

그리고는 의심스러운 (오타?)을 제거 라인 :

dg.Id=dg.Id; 

또 다른 방법을, 어떤 해결되지 않는 문제는 아니지만 노력할 가치가 있습니다. 그래서 당신은 예외를 얻을하지 않습니다

db.Datagrids.Add(dg); 
+0

도와 줘서 고마워. 첫째로 나는 잘못된 연결 문자열을 가졌고 다음으로 코드를 수정하고 db.savechanges() 대신에 모든 것을 말 했었습니다. 그저 일하는 것입니다. – nikhil

+0

내 기쁨 ... :) – ilans