NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: EntityFramewok loading vybraných Entit

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Majkel
Člen
Avatar
Majkel:11.8.2016 20:54

Ahoj, v EF Code First mám vazbu 1:N mezi User a UserDevice, kdy jeden User může mít N UserDevice.

public class User
    {
        [Key]
        public int Usr_Id { get; set; }
        [Required]
        [MaxLength(35)]
        public string Name { get; set; }
        [Required]
        [MaxLength(35)]
        public string Surname { get; set; }
        [Required]
        [MaxLength(35)]
        public string Location { get; set; }

        //NAVIGATION
        public User()
        {
            UserDevices = new List<UserDevice>();
        }

        public virtual ICollection<UserDevice> UserDevices { get; set; }

    }

public class UserDevice
    {
        [Key]
        public int UsrDev_Id { get; set; }
        [Required]
        [MaxLength(50)]
        public string PurposeOfUse { get; set; }

        // NAVIGATION
        //User can have many UserDevice
        public int Usr_Id { get; set; }
        public virtual User User { get; set; }
    }

A ještě konfigurace ve FluentAPI

modelBuilder.Entity<UserDevice>()
               .HasRequired<User>(r => r.User)
               .WithMany(m => m.UserDevices);

Můj problém je, že když zapíšu

var select = from s in db.Users
                         select s;

tak se mi naloaduje nejen seznam User, ale i seznam UserDevice ke každému z nich. Jakým způsobem můžu udělat select, abych získal pouze seznam User bez UserDevice.

 
Odpovědět
11.8.2016 20:54
Avatar
Marian Benčat:13.8.2016 0:22

Ne, to se ti nenaloaduje.. jen tam mas by default zapnuty lazy loading aa mas tam virtual kolekci, takzev okamziku, kdy se na to snazsi pristoupit (treba jen v debugu ukazes mysi) tak se ti ty devicy naloadi ;-) jestli to chces vypnout, tak dej pryc to virtual, nebo vypni kompletne lazy loading,, nebo udelej select new.. (projekci), ale ne select s --> jinak se stale jedna o dynamic proxy s lazy loadingem.

Editováno 13.8.2016 0:23
Nahoru Odpovědět
13.8.2016 0:22
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.