EntityFramework之一对一关系(二)

下面新建两个实体,关系为一对一

Product为产品类,WarrantyCard为保修卡类,一个产品对应一个保修卡,一个保修卡对应一个产品。

1、新建实体类

 1     public class Product
 2     {
 3         public int Id { get; set; }
 4         public string Name { get; set; }
 5         public string Description { get; set; }
 6
 7         public virtual WarrantyCard WarrantyCard { get; set; }
 8     }
 9
10     public class WarrantyCard
11     {
12         public int ProductId { get; set; }
13         public DateTime ExpiredDate { get; set; }
14
15         public virtual Product Product { get; set; }
16     }

2、创建EntityContext类并继承DbContext

 1     public class EntityContext : DbContext
 2     {
 3         public EntityContext()
 4             : base("name=DBConnectionString")
 5         {
 6
 7         }
 8
 9         public DbSet<Product> Product { get; set; }
10         public DbSet<WarrantyCard> WarrantyCard { get; set; }
11
12         protected override void OnModelCreating(DbModelBuilder modelBuilder)
13         {
14             modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
15             base.OnModelCreating(modelBuilder);
16         }

3、在web.config文件中添加数据库连接字符串

1 <connectionStrings>
2     <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=OneToOne;Integrated Security=true" providerName="System.Data.SqlClient" />
3 </connectionStrings>

4、创建表映射类

 1     public class ProductMap : EntityTypeConfiguration<Product>
 2     {
 3         public ProductMap()
 4         {
 5             ToTable("Product");
 6             HasKey(p => p.Id);
 7
 8             //两条语句效果一样
 9             HasOptional(p => p.WarrantyCard).WithRequired(p => p.Product);
10             //HasRequired(p => p.WarrantyCard).WithRequiredPrincipal(i => i.Product);
11         }
12     }
13
14     public class WarrantyCardMap : EntityTypeConfiguration<WarrantyCard>
15     {
16         public WarrantyCardMap()
17         {
18             ToTable("WarrantyCard");
19             HasKey(w => w.ProductId);
20         }
21     }

HasOptional(p => p.WarrantyCard).WithRequired(p => p.Product)这句大概意思是:在新增数据到Product表时可以不加数据到WarrantyCard表,也可以加,

但是往WarrantyCard表新增数据时必须有Product表中的ProductId,WarrantyCard依赖Product,生成的是关系是Product表Id是主键,WarrantyCard表ProductId是外键。

5、写点代码测试一下

 1     EntityContext db = new EntityContext();
 2     var product = new Product() { Description = "电器", Name = "电磁炉" };
 3     db.Set<Product>().Add(product);
 4     db.SaveChanges();
 5
 6     var card = new WarrantyCard() { ExpiredDate = DateTime.Now, ProductId = product.Id };
 7     db.Set<WarrantyCard>().Add(card);
 8     db.SaveChanges();
 9
10     //WarrantyCard为Product类中的WarrantyCard属性名
11     var list = db.Set<Product>().Include("WarrantyCard").ToList();

6、数据库关系图

时间: 2024-10-07 19:16:25

EntityFramework之一对一关系(二)的相关文章

EntityFramework 建立一对一关系

前言:本来要使用实体拆分实现一对一,但发现查询时无法单独查询,影响效率,故改用手动建立一对一关系 例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public DbSet<TestUnitPrice> TestUnitPrices { get; set; } public TestDbContext() : base() { } protected ove

Hibernate多表关系配置——一对一关系映射

两个对象之间是一对一的关系,如Person-IdCard 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联 唯一外键关联 外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系: 1.实体对象 1.1 Person实体对象 package demo.entity; /** * 人实体 * @author Don * @date:日期:2

Entity Framework - 基于外键关联的单向一对一关系

代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关系的映射! 一对一关系的映射: 用户账户密码信息表:包含用户名 密码 邮箱等账户登录时的信息 public class SystemAccount { public SystemAccount() { Id = DateUtils.GeneratedNewGuid(); } public Guid

Hibernate One-to-One Mappings 一对一关系映射

Hibernate One-to-One Mappings 一对一关系映射 关键:一对一关系映射和多对一关系映射很像,只是unique 属性值为 true 例子:一个员工只能有一个地址. Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml) 2.创建持久化类,即其实例需要保存到数据库中的类(Employee.java) 3.创建对象-关系映射文件(Employee.hbm.xml) 4.通过Hibernate API编写访问数据库的代码

(五)mybatis之一对一关系

一.需求分析 需求:查询订单信息关联查询用户信息 分析:一条订单只能由一个消费者来下单,也就是说从订单的角度来说与消费者是一对一的关系. 二.建数据库表和实体对象 其中订单表中的字段user_id对应着消费者表的主键user_id,是一对一关系. Customer.java package com.shyroke.entity; public class Customer { private int id; private String name; private String sex; pri

Hibernate学习(五)———— hibernate一对一关系映射详解

一.一对一关系的概述 一对一关系看起来简单,其实也挺复杂的.其中关系就包含了四种,单向双向和主键关联外键关联. 什么意思呢,也就是包含了单向一对一主键关联.双向一对一主键关联,单向一对一外键关联,双向一对一外键关联, 这四种中,单双向就不用在说了把,就是看你业务需求来去设置是否是单双向,而外键关联也很简单,前面的一对多和多对多度是依靠外键关联关系来写的.那主键关联关系是怎么样的呢?其实跟外键关联差不多,唯一的区别就是,让一个类的主键当作外键使用来指向另一个关联类的主键,从而两个类的主键就达到了同

hibernate(五) hibernate一对一关系映射详解

序言 之前讲解了一对多(单向.双向).多对多(双向),今天就讲解一下最后一个关系,一对一. 心情不错.状态也挺好的,赶紧写一篇博文造福一下大家把. --WZY 一.一对一关系的概述 一对一关系看起来简单,其实也挺复杂的.其中关系就包含了四种,单向双向和主键关联外键关联. 什么意思呢,也就是包含了单向一对一主键关联.双向一对一主键关联,单向一对一外键关联,双向一对一外键关联, 这四种中,单双向就不用在说了把,就是看你业务需求来去设置是否是单双向,而外键关联也很简单,前面的一对多和多对多度是依靠外键

mybatis中一对一关系映射

一对一关系中普通的配置方式 一.多表连接查询语句: <select id="selectStudentWithAddress" parameterType="int" resultMap="StudentWithAddressResult"> select s.stud_id, s.name, s.email,s.dob,s.phone, a.addr_id, a.street, a.city, a.state, a.zip,a.co

Hibernate_8_Person和IdCard实例_一对一关系:基于外键

1)建立Person类: public class Person { private Integer id; private String name; private IdCard IdCard; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId