无法将数据添加到ViewModel DbSet中

问题描述 投票:0回答:1
public ActionResult MojeTeme() 
{
    var db = new Palindrom.Models.Baza1Entities();
    var db1 = new Palindrom.Models.Entities();

    var db2 = new Palindrom.VjuModeli.ProfilKorisnika();

    var naslovi = db.PalindromBaza.Select(m => new Palindrom.VjuModeli.TemeKorisnika { Korisnik = m.Korisnik, ID = m.ID, Naslov = m.Naslov });

    foreach (var red in naslovi)
    {
        if (db2.teme != null)
            db2.teme.Add(red);
    }

    return View(db2);
}

我无法理解为什么此代码不起作用。

我有两个模型,我需要其中的一些数据,我想将其放入单个视图模型中:

public class ProfilKorisnika
{
    public DbSet<TemeKorisnika> teme { get; set; }
    public  DbSet<PKorisnika> profil { get; set; }
}

我只想关注其中一个 DbSet,因为我希望它只是复制和粘贴。

DbSet<TemeKorisnika>
db2.teme.Add(red)
线之前不应有任何数据。

我创建了一个变量

naslovi
来保存
DbSet<TemeKorisnika>
所需的三列,并且我想使用 foreach 循环来填充
db2.teme
。问题是,当我尝试加载视图时,我会看到一个
NullReferenceException
,并且调试器将我定向到这行代码:
db2.teme.Add(red)

我确定

red
变量不为空,
naslovi
变量也不为空。

通过一些研究,我被引导相信

db2.teme
没有初始化,作为初学者,我不完全确定我知道在这种情况下这意味着什么,如果它是已初始化的类
ProfilKorisnika
db2
对象中实例化,我是否遗漏了什么?

我已经围绕这种添加数据的方式旋转了一段时间,但没有尝试过任何与此不同的方法。

c# model asp.net-mvc-5 dbset
1个回答
0
投票

我将大部分代码更改为这样并且它有效:

var naslovi = db.PalindromBaza.Where(m => m.Korisnik == User.Identity.Name);
       
        var ajdijevi = db.PalindromBaza.Where(m => m.Korisnik == User.Identity.Name);

        var profil = db1.AspNetUsers.Select(m => new Palindrom.VjuModeli.PKorisnika {OpisPr = m.OpisProfila,NazivPrSl=m.NazivProfilneSlike ,Korisnik = m.UserName});

        List<Palindrom.VjuModeli.VjuModZaProfil> profilov = new List<Palindrom.VjuModeli.VjuModZaProfil>();
        int i = -1;

        try { 
            ajdijevi.First(); 
            foreach (var red in naslovi)
            {
                i++;
                profilov.Add(new VjuModeli.VjuModZaProfil
                {
                    ID = Convert.ToInt32(ajdijevi.ToArray()[i].ID),
                    Korisnik = profil.First(m => m.Korisnik == User.Identity.Name).Korisnik.ToString(),
                    Naslov = naslovi.ToArray()[i].Naslov.ToString(),
                    OpisPr = profil.FirstOrDefault(m => m.Korisnik == User.Identity.Name).OpisPr.ToString(),
                    NazivPrSl = "img.png"                
                }
               );
            }
        }

        catch { 
            profilov.Add(new VjuModeli.VjuModZaProfil
            {
                Naslov = "nslv",
                ID = 0,
                Korisnik = profil.First(m => m.Korisnik == User.Identity.Name).Korisnik.ToString(),
                OpisPr = profil.FirstOrDefault(m => m.Korisnik == User.Identity.Name).OpisPr.ToString(),
                NazivPrSl = "img.png"
            }
            );
        }
        return View(profilov);

我还将 ViewModel 修改为:

public class VjuModZaProfil
{
    public int ID { get; set; }
    public string Korisnik { get; set; }
    public string Naslov { get; set; }
    public string OpisPr { get; set; }
    public string NazivPrSl { get; set; }
}

希望这对某人有帮助,如果有人对这段代码有任何无意义的地方,我想澄清它。

© www.soinside.com 2019 - 2024. All rights reserved.