实体框架6中没有中间表的n:m(导航属性)

时间:2018-12-10 15:22:59

标签: entity-framework

使用此可视数据库设计时:

enter image description here

EF与普通SQL所期望的一样,在UserGroupUser_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用户
史蒂夫

0 个答案:

没有答案