簡體   English   中英

實體框架返回沒有值的 ICollection<>

[英]Entity Framework returns ICollection<> with no values

我在多對多關系中有 2 個實體,我想將一個學生添加到一個類中,但是在我從查詢中收到類對象后,它顯示該屬性為空。 我見過很多類似的問題,但在這種情況下沒有答案真正幫助我。

這是我的課程:

學生實體

class Student
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Surname { get; set; }

    public Student()
    {
        Classes = new HashSet<Class>();
    }

    public virtual ICollection<Class> Classes { get; set; }
}

類實體

class Class
{
    public virtual int Id { get; set; }
    public virtual string ClassName { get; set; }

    public Class()
    {
        Students = new HashSet<Student>();
    }

    public virtual ICollection<Student> Students { get; set; }
}

語境

class DatabaseContext : DbContext
{
    public DbSet<Student> Students { get; set; }
    public DbSet<Class> Classes { get; set; }

    public DatabaseContext()
    {
        Database.SetInitializer<DatabaseContext>(new Initializer());
    }
}

初始化程序

class Initializer : DropCreateDatabaseAlways<DatabaseContext>
{
    protected override void Seed(DatabaseContext context)
    {
        Student student1 = new Student { Id = 1, Name = "Name", Surname = "Surname" };

        Class class1 = new Class { Id = 1, ClassName = "Math"};
        class1.Students.Add(student1); // The Count of the collection is 1

        context.Students.Add(student1);
        context.Classes.Add(class1);

        base.Seed(context);
    }
}

現在,當我嘗試通過方法接收對象時,集合的計數為 0

public static Class GetClass(int classId)
    {
        using (var context = new DatabaseContext())
        {
            Class receivedClass = context.Classes.Find(classId); // The collection is empty, the ClassName is there, though

            return receivedClass;
        }
    }

我想知道如何將一個對象添加到另一個對象的集合中,然后還可以使用集合中的內容檢索該對象

我認為您正在尋找.Include() 加載相關實體有幾種不同的策略。

using (var context = new DatabaseContext())
{
    // Load all students and related classes
    var classes1 = context.Classes
                    .Include(s => s.Students)
                    .ToList();

    // Load one student and its related classes
    var classt1 = context.Classes
                   .Where(s => s.Name == "someClassName")
                   .Include(s => s.Students)
                   .FirstOrDefault();

    // Load all students and related classes  
    // using a string to specify the relationship
    var classes2 = context.Classes
                    .Include("Students")
                    .ToList();

    // Load one student and its related classes  
    // using a string to specify the relationship
    var class2 = context.Classes
                   .Where(s => s.Name == "someName")
                   .Include("Students")
                   .FirstOrDefault();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM