先給出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; } }
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; } }
下面是關系的設置。
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