0

我有一个例程可以返回大部分正确的数据。我向它传递一个字符串 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; }
                .
                .
             }

使用此代码调用子例程

             SubjectDB xsubject = new SubjectDB();
             xsubject = (SubjectDB)GetNewSubject(model.Subject.Id);

子程序是

             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 上并查看所有数据,包括列表中的数据,但是当我将鼠标悬停在返回的对象“xsubject”上时,我看到所有正确的返回数据,但列表为空。

4

5 回答 5

1

你错过了这条线GetNewSubject吗?

subjectdb.Address = Address;

更新:

此外,Address您班级的财产SubjectDB需要公开:

public List<AddressDB> Address { get; set; }
于 2012-10-08T17:09:54.740 回答
1

地址是函数中新创建的对象(子例程非常基本,带有行号:-))。您不会以任何方式将其添加到 subjectdb,因此它只是一个局部变量。您需要实际返回它,或将其存储在被调用者可以访问的地方。

于 2012-10-08T17:10:27.300 回答
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 得到正确更新,当模型传回主模型时,所有数据都在那里。

感谢所有这些帮助我了解我哪里出错了。

于 2012-10-10T11:32:39.013 回答
0

进一步的测试表明,数据确实没有进入模型列表。它正在进入本地 LIST,但没有进入模型的 LIST。那么如何将数据移动到模型列表变量而不是本地列表变量中。在我的情况下,模型包含

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

那么如何访问模型中的 LIST。我可以很好地访问字符串、int、DateTime、bool 数据。但是如何访问 LIST 以向其中添加数据?

于 2012-10-08T17:51:00.120 回答
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”,引用的对象未设置为对象的实例?

于 2012-10-09T14:36:56.263 回答