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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM