先给出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. TensorFlow 中的 tf.train.exponential_decay() 指数衰减法

    exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None) 使 ...

  2. label 赋值 , 隐藏 , 显示

    <label name='by_stages_number' id='by_stages_number'></label> document.getElementById(&q ...

  3. MySQL -- 全文检索(自然语言全文检索)

    自然语言全文本检索缺省或者modifier被设置为in natural language mode,都是进行自然语言检索.对于表中的每一行,match()都会返回一个关联值. mysql> CR ...

  4. Java NIO.2 —— 文件或目录拷贝操作

    拷贝整个文件树是可以递归每个目录和文件调用 Files.copy()方法.在使用的时候有一下注意事项. 在往目录拷贝文件之前,首先要保证目录已经存在.拷贝源目录(不论是否为空)都会生成目标目录.整个任 ...

  5. Redis设置和更新Key的过期时间

    EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 在 Redis 中,带有生存时间的 key 被称为『易失的』(volati ...

  6. 一种解决新版本API完全兼容老版本API的方法

    原文:http://android.eoe.cn/topic/android_sdk 这节课程我们讨论如何创建一个实现类,即能对应新版本的API,又能够保持对老版本API的支持. * 寻找一个替代的解 ...

  7. react-创建组件

    //定义组件class InputControlES6 extends React.Component{ render (){ return (<View style="{sty.co ...

  8. oracle11g exp导出问题:部分表导不出来

    在oracle导出表的命令exp时候发现一个问题,就是部分表全然的导不出来,经检查发现仅仅要是表为空的都会导不出来. 在例如以下表中发现segment_created都为NO的是导不出来的,经查询后, ...

  9. Linux重启命令与如何重启网络?

    分享下Linux重启命令的用法,linux如何重启网络的方法? 第一部分,有关Linux重启命令的用法 1.shutdown2.poweroff3.init4.reboot5.halt *---具体说 ...

  10. PCIE 调试过程记录

    遇到的问题 PCIE link不稳定 配置空间读写正常,Memory mapping空间读写异常 缘由 之前对PCIE的认识一直停留在概念的阶段,只知道是一个高速通讯协议,主要用于板内.板间的高速BU ...