• EF中的1:0或1:1关系以及1:n关系


    先给出1:0关系

    User表包括用户名和密码

    public class User
        {
           public int ID { get; set; }
    
           public string UserName { get; set; }
    
           public string Passwd { get; set; }
    
           public virtual UserInfo UserInfo { get; set; }
    
        }

    UserInfo表包括用户信息

    public class UserInfo
        {
            public int ID { get; set; }
    
            public string Name { get; set; }
    
            public string  Phone { get; set; }
    
            public virtual User User { get; set; }
    
            
        }

    image

    UseInfos中的ID即是主键也是外键

    再给出1:n关系

    Video表包括视频的信息

    public class Video
      {
          public int ID { get; set; }
    
          public string  Title { get; set; }
          
          public virtual ICollection<VideoRecord> Records { get; set; }
      }

    Record表包括视频的观看记录

    public class VideoRecord
        {
           public int ID { get; set; }
    
           public DateTime CrateAt { get; set; }
    
           public string IP { get; set; }
    
           public Video Video { get; set; }
        }

    image

    下面是关系的设置。

    modelBuilder.Entity<User>().ToTable("Users");
                modelBuilder.Entity<User>().HasKey(u => u.ID);
    
                modelBuilder.Entity<UserInfo>().ToTable("UserInfos");
                modelBuilder.Entity<UserInfo>().HasKey(i =>i.ID);
    
                ////针对“1:0或1:1”关系的设置
                modelBuilder.Entity<User>().HasOptional(u => u.UserInfo)
                    .WithRequired(i => i.User);
    
                modelBuilder.Entity<Video>().ToTable("Videos");
                modelBuilder.Entity<Video>().HasKey(v => v.ID);
    
                modelBuilder.Entity<VideoRecord>().ToTable("VideoRecords");
                modelBuilder.Entity<VideoRecord>().HasKey(r => r.ID);
    
    ////针对“1:n”关系的设置
                modelBuilder.Entity<Video>().HasMany(v => v.Records)
                .WithRequired(r => r.Video);

    测试程序

    Context context = new Context();
    
                UserInfo userInfo = new UserInfo() { ID = 1, Name = "李占朋", Phone = "3205" };
    
                User user = new User() { ID = 1, UserName = "lizhanpeng", Passwd = "123456", UserInfo = userInfo };
    
                
                context.Set<User>().Add(user);
                context.SaveChanges();
                context.Set<User>().Include(x => x.UserInfo).
                    ToList().ForEach(x =>
                {
                    Console.WriteLine(x.UserName + "真实姓名为:" + x.UserInfo.Name);
                });
                
                
               
                List<VideoRecord> records = new List<VideoRecord>();
                records.Add(new VideoRecord() { ID = 1, IP = "127.0.0.1", CrateAt = DateTime.Now });
                records.Add(new VideoRecord() { ID = 2, IP = "127.0.0.1", CrateAt = DateTime.Now });
                Video video = new Video() { ID = 1, Title = "视频1", Records = records };
                context.Set<Video>().Add(video);
                context.SaveChanges();
    
    
                var vd = context.Set<Video>().Include(x => x.Records).FirstOrDefault();
    
    
                vd.Records.ToList().ForEach(r =>
                {
                    Console.WriteLine("浏览者IP:" + r.IP + "浏览视频" + vd.Title);
                });
    
                //参考http://www.cnblogs.com/dudu/archive/2011/07/09/entity_framework_one_to_many.html
  • 相关阅读:
    mysql导入报错: Incorrect string value: 'xF0xA0x83x8CxE5x8D...' for column 'q_title' at row 4
    spring原理解析
    php连接mysql报错The server requested authentication method unknown to the client
    springmvc快速入门
    set集合
    Linux安装MySQL5.7
    Java中jar包获取资源文件的方式
    ⚡王道数据结构绪论⚡
    ❤️排序❤️
    😊考研线代知识点汇总😊
  • 原文地址:https://www.cnblogs.com/lzhp/p/4146558.html
Copyright © 2020-2023  润新知