向ViewModel的DbSet添加数据时出现NullReferenceException异常求助
问题分析与解决方案
问题根源
你在ViewModel中使用了DbSet<T>类型的属性,但DbSet是Entity Framework框架中绑定数据库上下文的集合类型,它的实例化由EF上下文负责。当你手动实例化ProfilKorisnika时,teme属性默认是null,所以调用Add方法会触发NullReferenceException。
解决步骤
1. 修改ViewModel的集合类型
将ViewModel中的DbSet替换为普通的集合类型(比如List<T>),因为ViewModel仅用于向视图传递数据,不需要EF的数据库操作能力:
public class ProfilKorisnika { // 直接初始化集合,避免null public List<TemeKorisnika> teme { get; set; } = new List<TemeKorisnika>(); public List<PKorisnika> profil { get; set; } = new List<PKorisnika>(); }
或者通过构造函数初始化(适合需要额外逻辑的场景):
public class ProfilKorisnika { public List<TemeKorisnika> teme { get; set; } public List<PKorisnika> profil { get; set; } public ProfilKorisnika() { teme = new List<TemeKorisnika>(); profil = new List<PKorisnika>(); } }
2. 优化控制器代码
不需要逐个遍历添加,直接将查询结果转为List赋值,更高效:
public ActionResult MojeTeme() { var db = new Palindrom.Models.Baza1Entities(); var db1 = new Palindrom.Models.Entities(); var db2 = new Palindrom.VjuModeli.ProfilKorisnika(); // 直接将查询结果转为List赋值给teme db2.teme = db.PalindromBaza.Select(m => new Palindrom.VjuModeli.TemeKorisnika { Korisnik = m.Korisnik, ID = m.ID, Naslov = m.Naslov }).ToList(); // 后续可按相同逻辑填充profil数据 // db2.profil = db1.XXX.Select(...).ToList(); return View(db2); }
额外说明
DbSet是EF用于数据库CRUD操作的组件,依赖于EF上下文的生命周期,不适合在ViewModel中使用。- 所有集合类型的ViewModel属性都应该显式初始化,避免空引用问题。
内容的提问来源于stack exchange,提问作者potatomen D
相关产品推荐
相关产品推荐

