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

Addressは、関数内で新しく作成されたオブジェクトです(サブルーチンは非常に基本的で、行番号は:-)です)。これを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 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 に答える
0

さらにテストを行うと、データが実際にはモデルリストに含まれていないことがわかります。ローカルのリストには入りますが、モデルのリストには入りません。では、ローカルのLIST変数ではなく、モデルのLIST変数にデータを移動するにはどうすればよいですか。私の場合、モデルには

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

では、モデルのLISTにアクセスするにはどうすればよいですか。文字列、int、DateTime、boolデータに問題なくアクセスできます。しかし、リストにアクセスしてデータを追加するにはどうすればよいですか?

于 2012-10-08T17:51:00.120 に答える
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 に答える