网络上常常看到有ef 1对1 1对多等关系的描述,按照我的理解,其根本就是为了呈现出一个视图,我最近设计了一个ef关系,请大家看一看。

需求描述

在gps车辆信息管理中,有个开户需求,其根本就是三种关系的对应,车辆信息,sim卡信息,以及终端信息,这三个实体是一一对应的,一旦开户,就需要三种信息。

先设计三种关系实体

    /// <summary>
    /// 实体模型抽象类
    /// </summary>
    public abstract class DbSetBase : IDbSetBase
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        public DbSetBase()
        {
            Id = Guid.NewGuid();
            CreatedDate = DateTime.Now;
            Deleted = false;
        }
        /// <summary>
        /// 唯一Id
        /// </summary>
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreatedDate { get; set; }
        /// <summary>
        /// 更新时间
        /// </summary>
        public DateTime? UpdatedDate { get; set; }
        /// <summary>
        /// 是否删除
        /// </summary>
        public bool Deleted { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }
    }
    /// <summary>
    /// 车辆数据
    /// </summary>
    [Table("S_VehicleInfo")]
    public class VehicleInfo : DbSetBase
    {
        /// <summary>
        /// 车牌号
        /// </summary>
        public string VehicleNo { get; set; }
        /// <summary>
        /// 车牌颜色
        /// </summary>
        public VehicleColor Color { get; set; }
        /// <summary>
        /// 企业信息
        /// </summary>
        public Guid EnterpriseId { get; set; }
        /// <summary>
        /// 企业信息
        /// </summary>
        [ForeignKey("EnterpriseId")]
        public virtual Enterprise Enterprise { get; set; }
        /// <summary>
        /// 使用状态
        /// </summary>
        public UsingType UsingType { get; set; }
        /// <summary>
        /// 开户信息
        /// </summary>
        public virtual OpenAccount Account { get; set; }
        /// <summary>
        /// 所属车队
        /// </summary>
        public Guid? CompanyId { get; set; }
        /// <summary>
        /// 所属车队
        /// </summary>
        [ForeignKey("CompanyId")]
        public virtual Company Company { get; set; }
    }
    /// <summary>
    /// 终端信息
    /// </summary>
    [Table("S_TerminalInfo")]
    public class TerminalInfo : DbSetBase
    {
        /// <summary>
        /// 终端Id
        /// </summary>
        public string TerminalNo { get; set; }
        /// <summary>
        /// 终端类型
        /// </summary>
        public string TerminalType { get; set; }
        /// <summary>
        /// 使用状态
        /// </summary>
        public UsingType UsingType { get; set; }
        /// <summary>
        /// 开户信息
        /// </summary>
        public virtual OpenAccount Account { get; set; }
    }
    /// <summary>
    /// Sim信息
    /// </summary>
    [Table("S_SimInfo")]
    public class SimInfo : DbSetBase
    {
        /// <summary>
        /// 手机号
        /// </summary>
        public string PhoneNo { get; set; }
        /// <summary>
        /// Sim卡号
        /// </summary>
        public string SimNo { get; set; }
        /// <summary>
        /// 使用状态
        /// </summary>
        public UsingType UsingType { get; set; }
        /// <summary>
        /// 开户信息
        /// </summary>
       public virtual OpenAccount Account { get; set; }
    }
    /// <summary>
    /// 开户信息
    /// </summary>
    [Table("OpenAccount")]
    public class OpenAccount : DbSetBase
    {
        /// <summary>
        ///  终端信息
        /// </summary>
        public virtual TerminalInfo Terminal { get; set; }

        /// <summary>
        /// 车辆信息
        /// </summary>
        public virtual VehicleInfo Vehicle { get; set; }

        /// <summary>
        /// Sim信息
        /// </summary>
        public virtual SimInfo Sim { get; set; }

        /// <summary>
        /// 注册时间
        /// </summary>
        public DateTime? RegisterTime { get; set; }

        /// <summary>
        /// 是否注册
        /// </summary>
        public bool? IsRegister { get; set; }
    }
}

,在通过 Fluent Api设计其对应关系:

 modelBuilder.Entity<OpenAccount>().HasRequired(a => a.Vehicle).WithOptional(b => b.Account).Map(m => m.MapKey("VehicleId"));
 modelBuilder.Entity<OpenAccount>().HasRequired(a => a.Sim).WithOptional(b => b.Account).Map(m => m.MapKey("SimId"));
 modelBuilder.Entity<OpenAccount>().HasRequired(a => a.Terminal).WithOptional(b => b.Account).Map(m => m.MapKey("TerminalId"));

这样三种对象的对应关系就完成了,开户信息表就是作为一种视图来呈现三种对象的对应。

EF 关系描述的更多相关文章

  1. Oracle数据库表空间与数据文件的关系描述正确的是( )

    Oracle数据库表空间与数据文件的关系描述正确的是( ) A.一个表空间只能对应一个数据文件 B.一个表空间可以对应多个数据文件 C.一个数据文件可以对应多个表空间 D.表空间与数据文件没任何对应关 ...

  2. EF 关系规则(一对一、一对多、多对多...)

    转自: http://www.cnblogs.com/dudu/archive/2011/07/11/ef_one-to-one_one-to-many_many-to-many.html Entit ...

  3. EF里一对一、一对多、多对多关系的配置

    EF关系规则 参考文章:http://www.cnblogs.com/feigao/p/4617442.html Entity Framework 实体间的关系,一对一,一对多,多对多,根据方向性来说 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  5. 【EF 5】结合项目实战分析EF三大工作模式之—Database First

    导读:所谓的EF的Databasefirst工作模式,是目前我们(不涉及社会领域)用的最广的一种模式,也是本次ITOO开发所采用的工作模式.本篇博客,就分析在项目中通过Database First模式 ...

  6. Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一)【转载】

    Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一) 自从搞好了单向一对一关系,装满代码的心中塞进了挥之不去的情丝 —— 单相思.谁都知道音乐世界离不开情感,可谁又知 ...

  7. TOJ3660家庭关系(并查集+hash+图的连通性)

    家庭关系   时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 总提交: 38            测试通过: 9 描述 给定若干家庭成员之间的关系 ...

  8. [TYVJ] P1017 冗余关系

    冗余关系 背景 Background 太原成成中学第3次模拟赛 第4题   描述 Description Mrs.Chen是一个很认真很称职的语文老师 ......所以,当她看到学生作文里的人物关系描 ...

  9. UML总结4---UML九种图关系说明

    转自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图. ...

随机推荐

  1. 以太网PHY 芯片之 MII/MDIO接口详解

    本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在10/100模式下和1000M模式下的设计方法. ...

  2. ubuntu下安装myeclipse

    一.下载myeclipse 官网下载:http://www.myeclipseide.com/ 我使用的是myeclipse pro 2014.run,重命名为myeclipse.run 示例路径:/ ...

  3. android模拟器与PC的端口映射(转)

    阅读目录 一.概述 二.实现步骤 回到顶部 一.概述 Android系统为实现通信将PC电脑IP设置为10.0.2.2,自身设置为127.0.0.1,而PC并没有为Android模拟器系统指定IP,所 ...

  4. js中的open和showModalDialog

    一.window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二.基本语法:window.open(pageURL,name,p ...

  5. Java数据结构与算法(21) - ch09红黑树(RB树)

    红-黑规则1. 每一个节点不是红色的就是黑色的2. 根总是黑色的3. 如果节点是红色的,则它的子节点必须是黑色的:如果节点是黑色的,其子节点不是必须为红色.4. 从根到叶节点或空子节点的每条路径,必须 ...

  6. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

  7. 导入三方包,出现ClassNotFoundException

    在项目中须要引用settings模块里面的某个活动.在eclipse中导入settins.jar包之后,使用例如以下方式启动: Intent intent = new Intent(); intent ...

  8. Visual Studio-Sequence Diagram

    UML Design Via Visual Studio-Sequence Diagram 本文主要介绍在Visual Studio中设计时序图,内容如下: 何时使用时序图 时序图元素介绍 条件.循环 ...

  9. ASP.NET的CMS

    最受欢迎的ASP.NET的CMS下载 1. Umbraco 项目地址 | 下载 Umbraco是一个开放源码的CMS内容管理系统,基于asp.net建立,使用mssql进行存储数据. 使用Umbrac ...

  10. JavaScript 奇技淫巧

    JavaScript 奇技淫巧 这里记录一下以前学习各种书籍和文章里边出现的JS的小技巧,分享给大家,也供自己查阅,同时感谢那些发现创造和分享这些技巧的前辈和大牛们. 1.遍历一个obj的属性到数组 ...