2012-10-08 9 views
0

대부분 정확한 데이터를 반환하는 루틴이 있습니다. 문자열 ID 코드를 전달하고 모델을 만들고 데이터베이스에서 데이터를 가져온 다음 모델을 채운 다음 모델을 다시 전달합니다. 모델의 List에 데이터가 포함되어 있지 않은 경우를 제외하고는 반환 모델이 정확하고 올바른 데이터를 가지고 있습니다.서브 루틴에서 객체 반환

모델은 서브 루틴이 코드

   SubjectDB xsubject = new SubjectDB(); 
      xsubject = (SubjectDB)GetNewSubject(model.Subject.Id); 
를 사용하여 호출이 하나

   public class SubjectDB 
      { 
       public string SubjectId { get; set; } 
       . 
       . 
       List<AddressDB> Address { get; set; } 
       . 
       . 
       [Key] 
       public int Id { get; set; } 
      } 
      public class DBEntities: DbContent 
      { 
       public DbSet<SubjectDB> SubjectDB { get; set; } 
       public DbSet<AddressDB> AddressDB { get; set; } 
       . 
       . 
      } 

과 유사

서브 루틴은

   Public object GetNewSubject(string Id) 
      { 

       SubjectDB subjectdb = new SubjectDB(); 
       DBEntites db = new DBEntities(); 

       var subjectxx = db.SubjectDB.First(x => x.SubjectId == Id); 
       var addressxx = db.AddressDB.First(x => x.SubjectId == Id); 
       . 
       . 
       subjectdb.SubjectId = subjectxx.Subjectid; 
       . 
       . 
       List<AddressDB> Address = new List<AddressDB>(); 
       Address.Add(addressxx); 
       . 
       . 
       return(subjectdb); 
       } 

이다 나는 수있는의 subjectdb 마우스 오버 서브 루틴 및 목록의 데이터를 포함하여 모든 데이터를 볼 수 있지만 반환 된 O 위에 마우스를 bs "xsubject", 나는 올바른 모든 반환 된 데이터를 보지만 목록은 비어 있습니다.

+1

공개'SubjectDB' GetNewSubject (문자열 ID)? 매번 캐스팅하는 대신 올바른 유형을 반환하는 것이 어떻습니까? 'First()'문은 데이터베이스에 존재하지 않는 주제 ID를 찾으려고 할 때 예외를 던질 것입니다. (당신은'FirstOrDefault'를 사용할 수 있고 id가 없을 때 null을 얻습니다.) – Laoujin

+1

메소드에서'object'를 반환하지 말아야합니다.). 또한 C# 메서드는 보통 그냥 메서드라고 부릅니다. "루틴"/ "서브 루틴"은 훨씬 덜 일반적입니다. –

+0

정말 많이 알려주려면 데이터베이스 구조와 나머지 코드에 대한 자세한 정보가 필요하다고 생각합니다. 적절한 유형을 사용하여 다시 시도해 보라고 권하고 싶지만 많이 할 수있는 의구심이 있습니다. – Corylulu

답변

0

누락 된 퍼즐 조각을 찾았습니다. 공개 일지라도 목록을 초기화하지 않았습니다.

   public class SubjectDB 
    { 
     public string SubjectId { get; set; } 
     . 
     . 
     public List<AddressDB> Address { get; set; } 
     . 
     . 
     [Key] 
     public int Id { get; set; } 

     public SubjectDB() 
     { 
      this.Address = new List<AddressDB>(); 
      . 
      . 
     } 
    } 
    public class DBEntities: DbContent 
    { 
     public DbSet<SubjectDB> SubjectDB { get; set; } 
     public DbSet<AddressDB> AddressDB { get; set; } 
     . 
     . 
    } 

이제 모든 작품 :

모델에 수정했습니다. DbSet 명령은 데이터베이스에서 데이터를 가져오고 LIST는 올바르게 업데이트되며 모델이 주 데이터로 전달되면 모든 데이터가 그대로 유지됩니다.

덕분에 내가 잘못 본 곳을 볼 수있었습니다.

1

GetNewSubject에이 라인이 누락 되었습니까?

subjectdb.Address = Address; 

는 업데이트 : 또한

, 당신의 SubjectDB 클래스의 당신의 Address 속성은 공개 할 필요가 :

public List<AddressDB> Address { get; set; } 
+0

주의 깊게 살펴보면 데이터베이스에서 Address 데이터를 가져 와서 mdoel "subjectdb"의 일부인 LIST에 직접 삽입한다는 것을 알 수 있습니다. –

+0

@ JohnDonaldson - 무슨 뜻인지 잘 모르겠습니다. AddressDB 오브젝트 목록을 작성 중이지만 수행하지 않는 항목을 서로 동일하게 설정할 때까지 해당 목록이 subjectdb 오브젝트의 목록과 동일하지 않습니다. – ken

1

주소는 함수에서 새로 생성 된 객체입니다 (서브 루틴이 너무 기본이다 줄 번호가 :-)). 어떤 식 으로든 subjectdb에 추가하지 않으므로 로컬 변수 일뿐입니다. 실제로 그것을 반환하거나 호출자가 액세스 할 수있는 어딘가에 저장해야합니다.

+0

그래서 어떻게 추가합니까? 나는 모델의 일부인 LIST를 채우고있다. 그것은 메인 루틴으로 다시 전달된다. LIST는 내가 메인을 볼 때 나타나지만 내가 넣은 데이터가 없다. –

0

추가 테스트를 통해 데이터가 실제로 모델 목록에 포함되지 않음을 알 수 있습니다. 모델은 LIST에 있지만 LIST에는 들어 가지 않습니다. 그렇다면 데이터를 Model LIST로 옮길 수있는 방법은 무엇입니까? 내 경우 모델에 포함되어 있습니다

  public clsss SubjectDB 
      { 
      public string SubjectId { get; set;} 
      . 
      . 
      LIST<AddressDB> Address { get; set; } 

그래서 어떻게 모델의 목록에 액세스합니까? 문자열, int, DateTime, bool 데이터에 액세스 할 수 있습니다. 하지만 데이터를 추가하려면 LIST에 액세스하는 방법은 무엇입니까?

+0

업데이트 된 답변보기 귀하의 주소 속성은 공개되지 않습니다. – ken

0

어제 늦게, 나는 당신 중 일부가 지적한 바를 발견했습니다. 나는 LIST를 공개하지 않았으므로 보이지 않는다. 나는 이제 그 문제를 해결했지만 이제는 다른 문제를 겪는다. 데이터베이스 쿼리가 실행될 때 이제 모델

  public class SubjectDB 
     { 
      public string SubjectId { get; set; } 
      . 
      . 
      public List<AddressDB> Address { get; set; } 
      . 
      . 
      [Key] 
      public int Id { get; set; } 
     } 
     public class DBEntities: DbContent 
     { 
      public DbSet<SubjectDB> SubjectDB { get; set; } 
      public DbSet<AddressDB> AddressDB { get; set; } 
      . 
      . 
     } 

, 나는 올바른 데이터를 다시 얻을

  Public object GetNewSubject(string Id)  
     {  

      SubjectDB subjectdb = new SubjectDB();  
      DBEntites db = new DBEntities();  

      var subjectxx = db.SubjectDB.FirstOrDefault(x => x.SubjectId == Id);  
      var addressxx = db.AddressDB.FirstOrDefault(x => x.SubjectId == Id);  
      .  
      .  
      subjectdb.SubjectId = subjectxx.Subjectid; 
      subjectdb.Name = subjectxx.Name;  
      .  
      . 
      // Put LIST data into LIST   
      subjectdb.Address.Add(addressxx);  
      .  
      .  
      return(subjectdb);  
      } 

그것은 현재의 오류 "subjectdb.Address.Add (addressxx);" 성명서. 나는 "NullReferenceException"개체 참조 인스턴스가 개체를 참조하지 않습니다?

관련 문제