使用此可视数据库设计时:
EF与普通SQL所期望的一样,在UserGroup
和User_Id
的数据库Group_Id
上创建了一个联接表。但是联接表从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用户
史蒂夫