• 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
  • 相关阅读:
    第3章 微服务太多,谁来管理
    第1章 微服务初体验
    第2章 构建单个微服务
    【】Spring 5 WebFlux入门
    【】在Spring WebFlux中处理错误
    vbox安装 ubuntu server 后 安装增强包
    mac版beyond compare 4 中对比class文件
    win10 x64 注册ZQDeviceOcx.ocx控件
    Java中多线程重复启动
    关于Java中的反射的一个简单使用
  • 原文地址:https://www.cnblogs.com/lzhp/p/4146558.html
Copyright © 2020-2023  润新知