zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    TREEVIEW拖拽对应修改目录
    shell脚本总结
    Linux将程序添加到服务的方法(通用【但最好还是用systemd】)
    Git客户端命令总结
    如何设置vim中tab键缩进---配置初始化设置
    在终端上创建Java项目及编译和运行
    Linux下Git安装及配置
    如何在eclipse的配置文件里指定jdk路径
    Redis总结和提取常用的和重要的命令
    Redis为什么是单线程
  • 原文地址:https://www.cnblogs.com/lzhp/p/4146558.html
Copyright © 2011-2022 走看看