从子例程返回一个对象

时间:2012-10-08 17:05:45

标签: c# entity-framework

我有一个例程,可以返回大部分正确的数据。我传递一个字符串Id代码,它创建一个模型,从数据库获取数据,填写模型,然后传回模型。返回模型看起来正确并且具有正确的数据,除了模型中的List不包含任何数据。

该模型看起来与此类似

             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”上时,我看到所有正确的返回数据,但List是空的。 / p>

5 个答案:

答案 0 :(得分:1)

您是否在GetNewSubject中错过了这一行?

subjectdb.Address = Address;

<强>更新

此外,您Address课程的SubjectDB属性需要公开:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分: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”,引用的对象没有设置为对象的实例?

答案 4 :(得分: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正确更新,当模型传递回main时,所有数据都在那里。

感谢所有帮助我看到我出错的地方。