Entity Framework Code First 模式-建立一对一联系

本文介绍了在Entity Framework中如何实现一对一的关系映射,通过DataAnnotations及FluentAPI两种方式详细解析了教室与多媒体设备之间的关系建立过程。

使用的例子为教室(ClassRoom),教室里的多媒体设备(Device),一个教室里有一套多媒体设备,一套多媒体设备只放在一个教室里。

1.Data Annotations方式

需要在任意一方的主键属性上加ForeignKey,以下是这两种方式的代码以及结果

方法一:

代码:

public class Device
    {
        [Key, ForeignKey("ClassRoom")]
        public Guid ClassRoomId { get; set; }

        public virtual ClassRoom ClassRoom { get; set; }
        public string Remark { get; set; }
    }
public class ClassRoom
    {
        public Guid Id { get; set; }
        [ MaxLength(10)]
        public string Number { get; set; }
        public virtual Device Device { get; set; }
        public string Remark { get; set; }
    }

测试结果:

方法二:

代码:

public class Device
    {        
        public Guid Id { get; set; }
        public virtual ClassRoom ClassRoom { get; set; }
        public string Remark { get; set; }
    }
 public class ClassRoom
    {
        [Key, ForeignKey("Device")]
        public Guid DeviceId { get; set; }
        [ MaxLength(10)]
        public string Number { get; set; }
        public virtual Device Device { get; set; }
        public string Remark { get; set; }
    }

执行结果:

2.Fluent API方式

主要使用WithRequiredPrincipal以及WithRequiredDependent方法,前者属性会被另外的实体引用,后者将引用另外的实体。

方法一:

代码:

 public class ClassRoom
    {
        public Guid ClassRoomId { get; set; }
        [ MaxLength(10)]
        public string Number { get; set; }
        public virtual Device Device { get; set; }
        public string Remark { get; set; }
    }
public class Device
    {
        
        public Guid DeviceId { get; set; }

        public virtual ClassRoom ClassRoom { get; set; }
        public string Remark { get; set; }
    }
modelBuilder.Entity<ClassRoom>().HasRequired(t => t.Device).
                              WithRequiredPrincipal(t => t.ClassRoom); 

结果:

方法二:

代码:

两个类都是相同的,这里就不做展示了

modelBuilder.Entity<ClassRoom>().HasRequired(t => t.Device).
                              WithRequiredDependent(t => t.ClassRoom); 

结果:

 

转载于:https://www.cnblogs.com/engineerlm/p/7608263.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值