先给出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

EF中的1:0或1:1关系以及1:n关系的更多相关文章

  1. 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...

  2. 2.EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  3. EF中执行sql语句,以及事务

    EF to sql string sql = "select T_Task.BSID,T_Task.CloseDate,T_Task.CompleteDate,T_Task.CloseUse ...

  4. DB表的关系及EF中Fluent API的使用

    现在使用多数的数据库是关系型数据库,那么表与表之间的关系就会显得尤其重要,对于数据的CRUD处理和以后数据的分析有很大的好处.下面是对于数据库中对表关系的理解以及在EF中使用Fluent API来创建 ...

  5. mvc+ef中比较数据

    例如:根据Para表中的type和paraid 字段进行比较 public class TypeComparer : IEqualityComparer<Para> { bool IEqu ...

  6. EF中逆变和协变

    EF中的增删改查: 实现步骤: 1.声明一个EF的上下文. bjhksjEntities dbContext = new bjhksjEntities(); 2.声明一个实体. HKSJ_USERS ...

  7. EF中使用SqlQuery进行参数化查询时抛出异常

    EF中使用带参数的SqlQuery进行查询时,抛出"另一个 sqlparametercollection 中已包含 sqlparameter"异常. 这是由于SqlParamert ...

  8. EF中执行原生sql与使用Local获取本地数据

    使用DbSet的Local属性可以访问当前context中被追踪且没有被标记为删除的实体(内存中的数据) using (var context = new BloggingContext()) { / ...

  9. EF中的transaction的使用范例

    注意一点: 在EF中使用事物后,对于一个新增的model,在saveChanges后,可以得到该实体的自增ID,但在提交事物之前, 该数据并没有真正的新增到DB中,但此时可以得到model新增的自增I ...

随机推荐

  1. 基于matplotlib的数据可视化 - 饼状图pie

    绘制饼状图的基本语法 创建数组 x 的饼图,每个楔形的面积由 x / sum(x) 决定: 若 sum(x) < 1,则 x 数组不会被标准化,x 值即为楔形区域面积占比.注意,该种情况会出现 ...

  2. [aaronyang原创] Mssql 一张表3列的sql面试题,看你sql学的怎么样

    文章已经迁移到:http://www.ayjs.net/post/99.html 文章已经迁移到:http://www.ayjs.net/post/99.html 文章已经迁移到:http://www ...

  3. Easyui中 messager出现的位置

    $.messager.alert 弹出框的位置随页面的长度越大越靠下. $.messager.alert('消息','只能对单个客户进行清款!','info'); 弹出的位置 太靠下方.修改为: $. ...

  4. 谁说C语言很简单?

    前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...

  5. 条件触发和边缘触发 及 epoll 的长处

    条件触发: 仅仅要输入缓冲有数据就会一直通知该事件 边缘触发: 输入缓冲收到数据时仅注冊1次该事件.即使输入缓冲中还留有数据,也不会再进行注冊 水平触发(level-triggered.也被称为条件触 ...

  6. Git实战(二)原理

    上次的博文Git实战(一)版本号控制概述中我们简介了一下版本号控制系统的概念,重点对版本号控制的三种类型进行了分析和对照,从本篇博文開始我们进入Git的世界,首先介绍一下Git实现版本号控制的原理. ...

  7. hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解

    hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解 一,环境: 1,主机规划: 集群中包括3个节点:hadoop01为Master,其余为Salve,节点之间局域网连接 ...

  8. Android build.gradle

    apply plugin: 'com.android.application' android { /*编译版本 , 因此我们强烈推荐总是使用最新的 SDK 进行编译 targetSdkVersion ...

  9. CentOS与RedHat的关系

    一.CentOS 与 RedHat 的关系 RedHat 在发行的时候,有两种方式:二进制的发行方式以及源代码的发行方式.无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布.但如果你 ...

  10. R概率分布函数使用小结

    记要 今天在计算分类模型自行区间时,用到了R中正太分布的qnorm函数,这里做简单记要,作为备忘. R中自带了很多概率分布的函数,如正太分布,二次分布,卡放分布,t分布等,这些分布的函数都有一个共性, ...