sqlserver使用EF模型经验

EF模型使用本人在之前两三年中从没使用过,所以刚开始使用就会踩上许多的坑。今天我不单单说下自己所踩的一些坑与当前公司中使用EF模型设计的理念,即是为我自己做个笔记,也是为其他人提供一个经验吧,但本人刚接触不久,有理解错误的还请大家能够多多指教。

首先说一下我现在所在公司的设计理念是怎么样的

  1. 公司数据库的设计模式是怎么样的

EF模型设计图表

sequenceDiagram
客户库 ->> 开发库: 客户相关表用视图关联
开发库-->>EF导入库:,
Note left of EF导入库: 对于需要操作的表设计一样的表,只需要查询的可以设计为视图
EF导入库-->> edmx文件: ,
Note left of edmx文件: 导入相关表结构生成实体模型

这将产生一个流程图。:

graph TD
A[service] -- 执行 中间省略其他业务操作说明--> B((DA数据交互))
B --更新实体数据--> C{emdx实体类}
C --通过EF导入库生成的emdx实体--> D(生成sql语句)
D--更新数据-->E((开发库数据表))
E--更新-->F{客户库中的数据表}
A--连接执行数据库-->E
  1. 分析两个图表:
  • 我们从第一张表中可以看出有三个数据库,一个是客户的数据库,一个为开发使用的数据库,还有一个是导入模型使用的库。第二张表则是程序执行操作数据库的流程和连接图。
  • 先说第一个库是客户库,应该不用多说,就是客户主要数据的来源
  • 再说第二个库是开发库,也不必多说就是我们开发人员所直接操作的库。
  • 第三个库则必须得要细说一下,因为这里它的作用是很大的,但必须得要理解了才行。
  • 我现在对它进行细说一下,但本人也是刚接触的有哪里说的不对,也请多多指教:
    1.由于EF模型操作视图是不能增删改操作的,只能查询,而对于数据则可以进行增删改查,但也是针对于单表的视图,多表关联的视图也只能查询。
    2.客户中的表我们在开发库添加了视图,其他程序业务操作则直接在开发库中创建表,从这里我们知道要操作客户的表在EF中我们无法执行,只能查询。这时为了都能够进行操作我们就添加了一个EF导入库,将需要修改客户的表在EF导入库中生成表,然后EF模型从该EF导入库中添加实体模型。但在web使用的数据库我们则使用开发库来连接,这样就解决了客户库的问题了。

EF模型导入遇上的问题

  1. 数据库表导入不入EF模型中那就查看一下表是否有主键值,没有主键值是添加不进去的。
  2. 数据库有许多连接服务时,可能有时候选错了数据库连接导致无法正常导入正确的模型,可这时模型中有许多原始表模型,我们不可能重新删除模型再创建,最简单的办法就是找到APP.config文件,里面找到连接字符串,将信息改为正确的连接,如果改了还是不行,那直接将那连接字符串的标签都删除,然后再去edmx更新从数据库到模型,这时它就会重新要你选择数据库进行连接了。
  3. 有时候我们直接选择从数据库更新到模型,是因为我们所更新的表是没有变的,但可能差个字段或是取消个字段,但更新之后它可能会显示找不到该字段的映射等问题,如果没有服务器需要对比则可以最直接的办法就是将该表的模型删除然后重新添加进来更新就好了。但如果有服务器的对比,删除再添加就会改变内容的位置,这时候比较就会显示有许多不一样。因此不需要删除可以直接点击edmx文件用xml格式打开,将有问题的字段映射部分去掉就行了。但要保证数据库与模型是一致的才可以。

sqlserver使用EF模型经验的更多相关文章

  1. (18)ASP.NET Core 基于现有数据库创建EF模型(反向工程)

    1.简介 Entity Framework Core可通过数据库提供给应用程序的插件访问许多不同的数据库.我们可以通过使用Entity Framework Core构建执行基本数据访问的ASP.NET ...

  2. asp.net core系列 28 EF模型配置(字段,构造函数,拥有实体类型)

    一. 支持字段 EF允许读取或写入字段而不是一个属性.在使用实体类时,用面向对象的封装来限制或增强应用程序代码对数据访问的语义时,这可能很有用.无法使用数据注释配置.除了约定,还可以使用Fluent ...

  3. asp.net core系列 27 EF模型配置(索引,备用键,继承)

    一.索引 索引是许多数据存储中的常见概念.虽然它们在数据存储中的实现可能会有所不同,但它们可用于更有效地基于列(或列集)进行查找.按照约定,用作外键每个属性 (或组的属性) 会自动创建索引.无法使用数 ...

  4. asp.net core系列 29 EF模型配置(查询类型,关系数据库建模)

    一.查询类型 此功能是EF Core 2.1中的新功能. EF Core除了实体类型之外,EF Core模型还可以包含查询类型,这些查询类型是针对“未映射到实体类型”的数据获取.比如视图,或只读数据表 ...

  5. asp.net core系列 23 EF模型配置(概述, 类型和属性的包含与排除)

    一.模型配置概述 EF使用一组约定基于实体类的定义来构建模型. 可指定其他配置以补充或替代约定的内容.本系列介绍的配置可应用于面向任何数据存储的模型,以及面向任意关系数据库时可应用的配置. 数据库提供 ...

  6. asp.net core系列 25 EF模型配置(隐藏属性)

    一. 隐藏属性概述 隐藏属性也叫影子属性,该属性不是在.net实体类中定义的属性,而是在EFCore模型中为该实体类型定义的属性.这些属性的值和状态完全在变更跟踪器中维护.它有二个功能:(1)当数据库 ...

  7. asp.net core系列 24 EF模型配置(主键,生成值,最大长度,并发标记)

    一.主键 键用作每个实体实例的主要唯一标识符. 使用关系数据库时,这会映射到主键的概念. 还可以配置不是主键的唯一标识符.按照约定,名为 Id 或 <type name>Id 的属性会配置 ...

  8. IBatis.Net项目数据库SqlServer迁移至Oracle经验

    最近完成了一个(IBatis.Net+MVC)项目的数据库+代码迁移工作,可把我折腾得~~~ IBatis.Net是一个ORM框架,具体介绍可以问度娘.我之前没用ORM框架使用经验,所以这一路我不是走 ...

  9. asp.net core系列 26 EF模型配置(实体关系)

    一.概述 EF实体关系定义了两个实体互相关联起来(主体实体和依赖实体的关系,对应数据库中主表和子表关系). 在关系型数据库中,这种表示是通过外键约束来体现.本篇主要讲一对多的关系.先了解下描述关系的术 ...

随机推荐

  1. 利用redis实现分布式事务锁,解决高并发环境下库存扣减

    利用redis实现分布式事务锁,解决高并发环境下库存扣减   问题描述: 某电商平台,首发一款新品手机,每人限购2台,预计会有10W的并发,在该情况下,如果扣减库存,保证不会超卖 解决方案一 利用数据 ...

  2. 014-多线程-基础-Exchanger-行线程间的数据交换

    一.简介 Exchanger类允许在两个线程之间定义同步点,当两个线程都到达同步点时,它们交换数据.也就是第一个线程的数据进入到第二个线程中,第二线程的数据进入到第一个线程中. Exchanger可以 ...

  3. java 虚拟机类加载 及内存结构

    http://www.jb51.net/article/105920.htm https://www.cnblogs.com/Qian123/p/5707562.html Java类加载全过程 一个j ...

  4. 浅谈-对modbus的理解

    浅谈-对modbus的理解 一.简介 Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准.1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP ...

  5. Django之model补充:一对多、跨表操作

    表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...

  6. 添加zookeeper到服务,并设置开机启动

    一.先安装jdk jdk 路径为/usr/local/java 二.再安装zookeeper zk路径为/use/local/zookeeper 三.创建zookeeper脚本 cd /etc/rc. ...

  7. 对图片清晰度问题,纠结了一晚上。清理了下Libray,瞬间变清晰了,泪奔

    对图片清晰度问题,纠结了一晚上.清理了下Libray,瞬间变清晰了,泪奔

  8. 【数据库开发】Redis数据库设置密码

    redis配置密码1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 ? 1 #requirepass foobared 去掉行前的注释 ...

  9. jqGrid取消所有选中

    // 获取所有选中行id var jqGridRowid=$("#jqGrid").jqGrid("getGridParam","selarrrow& ...

  10. python不定长参数 *argc,**kargcs(19)

    在 python函数的声明和调用 中我们简单的了解了函数的相关使用,然而在函数传递参数的时候,我们埋下了一个坑,关于不定长参数的传递我们还没有讲,今天这篇文章主要就是讲解这个问题. 一.函数不定长参数 ...