zoukankan      html  css  js  c++  java
  • 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); 

    结果:

  • 相关阅读:
    hive默认配置 .hiverc
    hive 行列转换
    hive 全表全字段对比
    shell 获取hive表结构
    粘包现象与解决方案
    win 关闭正在使用的端口
    pycharm格式报错: Remove redundant parentheses
    博客系统作业
    django中间件
    django的用户认证组件
  • 原文地址:https://www.cnblogs.com/engineerlm/p/7608263.html
Copyright © 2011-2022 走看看