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

使用的例子为教室(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