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

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
Стив