2016-04-07 3 views
1

У меня есть две таблицы в базе данных Sql, скажем, таблицы пользователей и UserEducation. В таблице пользователей есть несколько записей, и для каждого пользователя есть одна запись в таблице UserEducation. Я хочу показать все записи в grid-view, присоединившись к этим двум таблицам? Как я могу это сделать с помощью Entity Framework?Как получить несколько записей из второй таблицы в списке записей из первой таблицы Использование EF

ответ

0

Или с помощью Linq к Entity и объединения таблиц .:

using (var context = new YourContext) 
    { 
    var users = context.UserDbSet; 
    var userEdications = context.UserEdication.DbSet ; 

    var joinedTables = from user in users 
         join userEdication in userEdications on user.userId = userEdication.userId 
         select new OutPutEntity 
         { 
           Name = user.Name, 
           Edication = userEdication.Edication 
         } 

         gridView.DataSource = joinedTables.toList(); // should be placed outside the using. (here just as a sample) 
    } 

Преимущество - вы можете указать формат вывода на IQurable уровне. Даунсайд - это выглядит сложным.

1

Вы можете просто использовать navigationproperty от пользователя:

var user = new User(); 
user.UserEducation.[Property]; 
+1

Как получить список пользователей на основе списка пользователей таблицы – sa227

1

поскольку существует 12:59 отображение, я предпочел бы сделать одну таблицу. Но конкретно вы можете иметь:

entityframeworkContext obj = new entityframeworkContext(); Список xyz = obj.database.SqlQuery ("select u.fieldname1 как modeltablefield1, u.fieldname2 как modeltablefield2, ued.fieldname1 как modeltablefield3, ued.fieldname2 как modeltablefield4 от пользователей u внутреннее соединение UserEducation ued on u.commonfield = ued.commonfield «);

Здесь общее поле будет внешним ключом во второй таблице Таблица моделей - это любая требуемая вами логическая таблица из комбинированного запроса (зависит от MVC) Надеюсь, что это сработает для вас!

1

Я создал консольное приложение для удовлетворения вашего прецедента. Вам придется повторно использовать этот код в своих окнах или в веб-приложении, где вы хотите привязать вывод к виду сетки. Я предположил некоторые свойства в классах POCO, вы всегда можете изменить их, исходя из того, какие все значения вы сохраняете для своих пользователей и образовательных объектов. Я не упоминал ни одной строки подключения в своем фрагменте кода. Структура Entity автоматически подключается к базе данных sql express на вашем компьютере, если вы не укажете строку подключения или она будет подключаться к базе данных, для которой вы упомянули строку подключения в файле app.config или web.config. Надеюсь это поможет!

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Linq; 

namespace UsersCodeFirst 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var db = new EfContext()) 
      { 
       // Display all users with their education from the database 
       var query = from user in db.Users 
          join userEducation in db.UserEducations 
          on user.UserId equals userEducation.UserId 
        orderby user.Name 
        select new 
        { 
         Name = user.Name, 
         UserEducation = userEducation.CourseName 
        }; 

       //bind to grid by setting grid data source to query.ToList() 
      } 

      Console.WriteLine("Press any key to exit..."); 
      Console.ReadKey(); 
     } 
    } 

    public class User 
    { 
     public string UserId { get; set; } 
     public string Name { get; set; } 
     public virtual List<Education> Posts { get; set; } 
    } 

    public class Education 
    { 
     public string EducationId { get; set; } 
     public string CourseName { get; set; } 
     public string UserId { get; set; } 
    } 

    public class EfContext : DbContext 
    { 
     public DbSet<Education> UserEducations { get; set; } 
     public DbSet<User> Users { get; set; } 
    } 
} 

Вам нужно будет добавить пакет Entity Framework nuget в ваш проект, чтобы получить ссылку на класс DbContext.

+0

Хорошее объяснение, у меня есть идея, как объяснил Владимир – sa227

Смежные вопросы