none
problema con entities in entity framework utilizzando database first RRS feed

  • Domanda

  • ciao a tutti, stò imparando asp .net mvc ed entity framework e per esercizio vorrei fare un forum ,dopo aver impostato il database ho eseguito il comando 

    "Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=SmartForum;Trusted_Connection=True; Microsoft.EntityFrameworkCore.SqlServer -OutputDir ModelsFromDb"

    segue l'entity Argomenti per area

    modelBuilder.Entity<ArgomentiPerArea>(entity =>
                {
                    entity.HasKey(e => e.ArgomentoId);
    
                    entity.Property(e => e.ArgomentoId).HasColumnName("argomentoId");
    
                    entity.Property(e => e.Archiviato).HasColumnName("archiviato");
    
                    entity.Property(e => e.AreaId).HasColumnName("areaId");
    
                    entity.Property(e => e.ModeratoreId).HasColumnName("moderatoreId");
    
                    entity.Property(e => e.NomeArgomento).HasColumnName("nome_argomento");
    
                    entity.Property(e => e.NumeroRigaPerArea).HasColumnName("numero_riga_per_area");
    
                    entity.Property(e => e.TestoPerArgomento).HasColumnName("testo_per_argomento");
    
                    entity.HasOne(d => d.Area)
                        .WithMany(p => p.ArgomentiPerArea)
                        .HasForeignKey(d => d.AreaId)
                        .HasConstraintName("FK_ArgomentiPerArea_Aree");
    
                    entity.HasOne(d => d.Moderatore)
                        .WithMany(p => p.ArgomentiPerArea)
                        .HasForeignKey(d => d.ModeratoreId)
                        .HasConstraintName("FK_ArgomentiPerArea_Moderatori");
                });

    seguono le classi

    public partial class ArgomentiPerArea
        {
            public ArgomentiPerArea()
            {
                Thread = new HashSet<Thread>();
            }
            [Key]
            public int ArgomentoId { get; set; }
            public string NomeArgomento { get; set; }
            public int? AreaId { get; set; }
            public bool? Archiviato { get; set; }
            public int? NumeroRigaPerArea { get; set; }
            public string TestoPerArgomento { get; set; }
            public int? ModeratoreId { get; set; }
    
            public virtual Aree Area { get; set; }
            public virtual Moderatori Moderatore { get; set; }
            public virtual ICollection<Thread> Thread { get; set; }
    
        }
    
    public partial class Aree
        {
            public Aree()
            {
                ArgomentiPerArea = new HashSet<ArgomentiPerArea>();
            }
            [Key]
            public int AreaId { get; set; }
            public string NomeArea { get; set; }
            public int? NumeroRiga { get; set; }
            public int? NumeroColonna { get; set; }
    
            public virtual ICollection<ArgomentiPerArea> ArgomentiPerArea { get; set; }
        }
    
    public partial class Moderatori
        {
            public Moderatori()
            {
                ArgomentiPerArea = new HashSet<ArgomentiPerArea>();
                SegnalazioniPerModeratori = new HashSet<SegnalazioniPerModeratori>();
            }
            [Key]
            public int ModeratoreId { get; set; }
            public string UsernameModeratore { get; set; }
            public string PasswordHash { get; set; }
            public string NomeCognome { get; set; }
            public bool? Archiviato { get; set; }
    
            public virtual ICollection<ArgomentiPerArea> ArgomentiPerArea { get; set; }
            public virtual ICollection<SegnalazioniPerModeratori> SegnalazioniPerModeratori { get; set; }
        }

    quando eseguo il metodo index per di ArgomentiAreasController Area a Moderatore sono a null,segue il codice 

    public class ArgomentiPerAreasController : Controller
        {
            private ModelsFromDb.SmartForumContext db = new ModelsFromDb.SmartForumContext();
    
            // GET: ArgomentiPerAreas
            public ActionResult Index()
            {
                var argomentiPerAreas = db.ArgomentiPerArea.Include(a => a.Area).Include(a => a.Moderatore);            
    
                return View(argomentiPerAreas.ToList());
            }
           ............
           ............
    }

     attendo qualche suggerimento,se servono altre informazioni spero possiate chiedermele , grazie

    venerdì 8 marzo 2019 09:02

Risposte

  • ho risolto usando questa classe 

    namespace WebApplication28.ModelsFromDb
    {
        [Serializable]
        public class ArgomentiViewModel
        {
            public int ArgomentoId { get; set; }
            public string NomeArgomento { get; set; }
            public bool? Archiviato { get; set; }
            public int? NumeroRigaPerArea { get; set; }
            public string TestoPerArgomento { get; set; }
            public string NomeArea { get; set; }
            public string UsernameModeratore { get; set; }
        }
    }

    e valorizzandola così

    public ActionResult Index()
            {
                //var argomentiPerAreas = db.ArgomentiPerArea.Include(a => a.Area).Include(a => a.Moderatore);            
                //return View(argomentiPerAreas.ToList());
             var argomentiViewModels = db.ArgomentiPerArea.Select(x => new ArgomentiViewModel
                        {
                            ArgomentoId=x.ArgomentoId,
                            NomeArgomento = x.NomeArgomento,
                            Archiviato = x.Archiviato,
                            NumeroRigaPerArea = x.NumeroRigaPerArea,
                            TestoPerArgomento = x.TestoPerArgomento,
                            NomeArea = x.Area.NomeArea, // From Area
                            UsernameModeratore = x.Moderatore.UsernameModeratore // From Moderator
                        }).ToList();
             return View(argomentiViewModels);
    
            }

    venerdì 8 marzo 2019 18:01