我有一个例程,可以返回大部分正确的数据。我传递一个字符串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>
答案 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时,所有数据都在那里。
感谢所有帮助我看到我出错的地方。