EF 关系描述

网络上常常看到有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"));

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

时间: 2024-07-31 02:12:46

EF 关系描述的相关文章

EF关系配置之1:N

对EntityFramework进行关系配置,既可以在继承自DbContext的类中,通过override的OnModelCreating方法中进行定义,也可以在自定义的Configuration类中使用HasRequired.HasMany等方法进行配置. 但要注意,在对类型-表级别的映射选项进行配置时,只能在OnModelCreating方法中进行定义.如下图为例: 注释中的效果为,若定义的实体类类名为User,则将其与数据库中名为User的表进行关联,若数据库中无名为User的表,则抛出异

cocos3 director sprite scene之间的关系

Scene *scene=Scene::create(); Layer *layer=Layer::create(); scene->addChild(layer); Sprite *s=Sprite::create("HelloWorld.png"); s->setPosition(100,100); layer->addChild(s); director->runWithScene(scene); 一个程序将这几个人的关系描述的很透彻

Effective c++(笔记)之继承关系与面向对象设计

1.公有继承(public inheritance) 意味着"是一种"(isa)的关系 解析:一定要深刻理解这句话的含义,不要认为这大家都知道,本来我也这样认为,当我看完这章后,就不这样认为了. 公有继承可以这样理解,如果令class D以public 的形式继承了class B ,那么可以这样认为,每一个类型为D的对象同时也可以认为是类型为B的对象,但反过来是不成立的,对象D是更特殊化更具体的的概念,而B是更一般化的概念,每一件事情只要能够施行于基类对象身上,就一定可以应用于派生类对

表与表之间关系回顾

------------------siwuxie095 表与表之间关系回顾 1.一对多 (1) 1)场景:分类和商品的关系 2)描述:一个分类里面有多个商品,一个商品只能属于一个分类 (2) 1)场景:客户和联系人的关系 2)描述:一个客户里面有多个联系人,一个联系人只能属于一个客户 注意:这里的客户是公司级的,即 公司,联系人 即 公司里的员工,实 际上就是公司和员工的关系 (3)一对多建表:通过外键建立关系 在多的那一方创建字段作为外键,指向一的那一方的主键 客户: cid cname 1

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

转自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图.组件图.配置图. 1)用例图(Use Case Diagram) 它是UML中最简单也是最复杂的一种图.说它简单是因为它采用了面向对象的思想,又是基于用户视角的,绘制非常容易,简单的图形表示让人一看就懂.说它复杂是因为用例图往往不容易控制,要么过于复杂,要么过于简单. 用例图表示了角色和用例以及它们

计蒜客课程竞赛入门--冗余关系(并查集) 流程记

蒜头最近在沉迷小说,尤其是人物关系复杂的言情小说.它看到的人物关系描述得很的麻烦的时候觉得非常蒜疼,尤其是人物关系里有冗余的时候.什么是冗余关系呢? 这篇小说里有n句描述人物关系的句子,描述了n个人的关系. 每条句子的定义是这样的: X<->Y    它的意思是:X认识Y,Y也认识X 我们认为小说中的人物关系是具有传递性的,假如A认识B,B认识C,则A也认识C. 冗余关系的定义:就是即使没有这条人物关系,原来的人物之间的所有关系也照样成立. 比如: 小说中已经提到了A认识B,B也认识C.在此之

图描述之:类图总结

一.什么是类图 类图从通俗的角度来讲,我认为是一种用来描述一个模型静态结构的图,包括:模块的定义,模块的功能以及比较重要的是描述模块之间的关系.通过这种图的描述方式,可以让读者从一个直观的角度来去了解一个软件项目的整体框架,而不用像通过阅读代码来学习,这样可以省略一些在无关紧要的实现细节上面的开销.(个人见解) 能够百度到的对类图的定义: 类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类.类的内部结构以及它们与其他类的关系等.类图不显示暂时性信息. 类图(Class

冗余关系_并查集

冗余关系 蒜头最近在沉迷小说,尤其是人物关系复杂的言情小说.它看到的人物关系描述得很的麻烦的时候觉得非常蒜疼,尤其是任务关系里有冗余的时候.什么是冗余关系呢? 这篇小说里有n句描述人物关系的句子,描述了n个人的关系. 每条句子的定义是这样的: X<->Y    它的意思是:X认识Y,Y也认识X 我们认为小说中的人物关系是具有传递性的,假如A认识B,B认识C,则A也认识C. 冗余关系的定义:就是即使没有这条人物关系,原来的人物之间的所有关系也照样成立. 比如: 小说中已经提到了A认识B,B也认识

冗余关系

时间限制:1000 内存限制:65536K 蒜头最近在沉迷小说,尤其是人物关系复杂的言情小说.它看到的人物关系描述得很的麻烦的时候觉得非常蒜疼,尤其是人物关系里有冗余的时候.什么是冗余关系呢? 这篇小说里有n句描述人物关系的句子,描述了n个人的关系. 每条句子的定义是这样的: X<->Y    它的意思是:X认识Y,Y也认识X 我们认为小说中的人物关系是具有传递性的,假如A认识B,B认识C,则A也认识C. 冗余关系的定义:就是即使没有这条人物关系,原来的人物之间的所有关系也照样成立. 比如: