n: m в Entity Framework 6 без промежуточной таблицы (свойства навигации) - PullRequest
0 голосов
/ 10 декабря 2018

При использовании этого визуального дизайна базы данных:

enter image description here

EF создает таблицу соединения в базе данных с именем UserGroup с User_Id и Group_Id как и следовало ожидать для нормального SQL.Но таблица соединения не видна из кода C #.

Так что вы не можете использовать это:

var query = from dealer in db.UserGroup
            join user in db.UserSet on User.Id equals dealer.User_ID
            join mygroup in db.GroupSet on mygroup.Id equals dealer.Group_ID .....

Тем не менее, данные в базе данных позволят это.Есть ли способ заставить это работать без создания новой сущности для таблицы соединений и создания двух отношений 1: n?

Я пробовал другие способы:

using SimpleTest4;
using System;
using System.Linq;

namespace SimpleTests4
{
    class TestModel
    {

        static void Main(String[] args)
        {
            using (var db = new Model4Container())
            {
                var User = db.UserSet.Where(s => s.Username == "Peter").SingleOrDefault();

                if (User == null)
                {
                    User = new User { Username = "Peter" };
                    db.UserSet.Add(User);
                }

                var User2 = db.UserSet.Where(s => s.Username == "Steve").SingleOrDefault();

                if (User2 == null)
                {
                    User2 = new User { Username = "Steve" };
                    db.UserSet.Add(User2);
                }

                var Group = db.GroupSet.Where(s => s.Groupname == "Users").SingleOrDefault();

                if (Group == null)
                {
                    Group = new Group { Groupname = "Users" };
                    Group.User.Add(User);
                    db.GroupSet.Add(Group);
                }
                db.SaveChanges();

                var result = from p in db.UserSet
                             select new
                             {
                                 p.Username,
                                 p.Group
                             };


                foreach (var item in result)
                {
                    Console.WriteLine("123" + item);
                }


                var query = from c in db.UserSet
                            select new
                            {
                                c,
                                g = from o in c.Group
                                         select new { o.Groupname }
                            };

                foreach (var item in query)
                {
                    Console.WriteLine("456 " + item.c.Username + " " + item.g);
                }

                Console.ReadKey();

            }
        }
    }
}

, который выводит следующее:

123{ Username = Peter, Group = System.Collections.Generic.HashSet`1[SimpleTest4.Group] }
123{ Username = Steve, Group = System.Collections.Generic.HashSet`1[SimpleTest4.Group] }
456 Peter System.Collections.Generic.List`1[<>f__AnonymousType2`1[System.String]]
456 Steve System.Collections.Generic.List`1[<>f__AnonymousType2`1[System.String]]

Почему я не могу использовать item.g.Groupname в последнем запросе и какисправить вывод?
Хотелось бы увидеть:

Peter Users
Стив

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