sqlserver使用EF模型经验
EF模型使用本人在之前两三年中从没使用过,所以刚开始使用就会踩上许多的坑。今天我不单单说下自己所踩的一些坑与当前公司中使用EF模型设计的理念,即是为我自己做个笔记,也是为其他人提供一个经验吧,但本人刚接触不久,有理解错误的还请大家能够多多指教。
首先说一下我现在所在公司的设计理念是怎么样的
- 公司数据库的设计模式是怎么样的
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.由于EF模型操作视图是不能增删改操作的,只能查询,而对于数据则可以进行增删改查,但也是针对于单表的视图,多表关联的视图也只能查询。 2.客户中的表我们在开发库添加了视图,其他程序业务操作则直接在开发库中创建表,从这里我们知道要操作客户的表在EF中我们无法执行,只能查询。这时为了都能够进行操作我们就添加了一个EF导入库,将需要修改客户的表在EF导入库中生成表,然后EF模型从该EF导入库中添加实体模型。但在web使用的数据库我们则使用开发库来连接,这样就解决了客户库的问题了。
EF模型导入遇上的问题
- 数据库表导入不入EF模型中那就查看一下表是否有主键值,没有主键值是添加不进去的。
- 数据库有许多连接服务时,可能有时候选错了数据库连接导致无法正常导入正确的模型,可这时模型中有许多原始表模型,我们不可能重新删除模型再创建,最简单的办法就是找到APP.config文件,里面找到连接字符串,将信息改为正确的连接,如果改了还是不行,那直接将那连接字符串的标签都删除,然后再去edmx更新从数据库到模型,这时它就会重新要你选择数据库进行连接了。
- 有时候我们直接选择从数据库更新到模型,是因为我们所更新的表是没有变的,但可能差个字段或是取消个字段,但更新之后它可能会显示找不到该字段的映射等问题,如果没有服务器需要对比则可以最直接的办法就是将该表的模型删除然后重新添加进来更新就好了。但如果有服务器的对比,删除再添加就会改变内容的位置,这时候比较就会显示有许多不一样。因此不需要删除可以直接点击edmx文件用xml格式打开,将有问题的字段映射部分去掉就行了。但要保证数据库与模型是一致的才可以。