В LINQ, как DbSet, коллекция сущностей одной таблицы может указывать на другую таблицу - PullRequest
0 голосов
/ 25 января 2020
 public PlutoDBContext()
        : base("name=PlutoDBContext")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Author> Authors { get; set; }
    public virtual DbSet<Course> Courses { get; set; }
    public virtual DbSet<CourseSection> CourseSections { get; set; }
    public virtual DbSet<Post> Posts { get; set; }
    public virtual DbSet<Tag> Tags { get; set; }
    public virtual DbSet<tblUser> tblUsers { get; set; }

================================================= =======================

 static void Main(string[] args)
    {
        var dbContext = new PlutoDBContext();
        //var obj = dbContext.GetCourses();
        //foreach (var item in obj)
        //{
        //    Console.WriteLine(item.Title);
        //}
        var ent = from c in dbContext.Courses
                  where c.Level ==2 && c.Author.AuthorID ==1
                  select c;
        foreach (var item in ent)
        {
            Console.WriteLine(item.Price);
        }

================== ================================================== ==

В приведенном выше LINQ c - это переменная, указывающая на таблицу «Курс» (dBcontext.Courses). «c .Level» подходит, поскольку «Level» - это столбец внутри таблицы «Course». Но как мы можем использовать c .Author.AuthorId, «Author» - это другая таблица, а «AuthorId» - это имя столбца, а «c» - это набор сущностей внутри таблицы «Course».

Я имею в виду "c" должен иметь доступ только к свойствам класса "Курс". Как он указывает на класс «Автор» и получает доступ к его свойствам (c .Author.AuthorId).

1 Ответ

1 голос
/ 25 января 2020

Посетите ссылку , чтобы понять, как EF управляет отношениями «один-к-одному», «один-ко-многим» и «многие-ко-многим» между объектами.

для По вашему сценарию я представлял, что отношение между Course и Author равно one-to-many, я имею в виду, что в каждом курсе может быть только один Автор, но Автор может иметь несколько курсов. поэтому, чтобы иметь это отношение, ваша модель должна выглядеть следующим образом:

public class Course
{
   //Rest of your properties goes here

   [ForeignKey(nameof(Author))]
   public int AuthorId {get; set;}

   public virtual Author Author {get; set;}
}

public class Author 
{
   //Rest of your properties goes here

   public virtual ICollection<Course> Courses {get; set;}
}

Как он указывает на класс Author и получает доступ к его свойствам (c .Author.AuthorId)?

В вышеупомянутых моделях между этими двумя таблицами будет отношение «один ко многим». так что в вашем Course запросе LINQ у вас будет доступ к Author.

from c in dbContext.Courses
              where c.Level ==2 && c.Author.AuthorID ==1
              select c;

удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...