学习笔记31_ORM框架ModelFirst设计数据库
ModelFirst就是先设计实体数据类型,然后根据设计的数据类型,生成数据库表
1.新建项--ADO.NET实体数据模型--空数据模型--进入模型设计器(点击xxx.edmx文件也能进入设计器)。
2.从工具箱中,拖一个数据模型(或右击,添加实体,注意,“实体名称”和“实体集“不要留有中文)--右击新建属性。
*实体名称就是数据对象类的名称,实体集就是对应表名的名称
*新建的属性,按F4能迅速打开属性设置,能设置是否为NULL,默认值,数据类型等等。
*如果设置为默认值,那么在实体类的构造函数中,会给属性赋初值。
*新建一个实体,对应就是新建一个数据表
3.右击,添加关联,能设置“一对多关系”,那么,将来在写代码的时候,假如Model1为一,Model2为多,
就可以 : Model1.model2的方式,来访问表2的内容了
*在数据模型上,就表现为:
Model1中,多了一个名字为Model2的属性,而Model2中,就多了类型为Model1的属性。
***而看C#代码,就表型为:
Model1中,除了自己的固有属性外,多了 public virtual ICollectoin<Model2> Model2{get;set;}
Model2中,除了自己的固有的属性外,多了 public int ModelID{get;set;}和
public virtual Model1 Model1{get;set;};
***而从数据库表的设计来看,就是主键和外键的关系。
4.可根据模型生成SqlServer数据库,在模型设计器中,右击“根据模型生成数据库”。
(在创建数据库时,要选择“是,在连接字符串中包括敏感数据”,不然就要自己填账号密码了)
5.在第4步之后,就会生成XXXModel.edmx.sql文件,右击“执行”,就执行sql语句,创建数据库和表了。
**插入操作
var dbContext = new XXXModelContainer();
//往Model1表中添加mdel1
var model1 = new Model1();
dbContext.Model1.Add(model1);
//往model2表中添加model2
var model2 = new Model2();
dbContext.Model2.add(model2);
var model2_ = new Model2();
dbContext.Model2.add(model2_);
//使model1和两个model2关联
model1.Model2.add(model2);
model1.Model2.add(model2_);
//保存,执行Sql
dbContext.SaveChange();
***修改操作
var model1 = new Model1();
model.ID = 1;//ID一定要对,要是ID为主键了话,如果不知道ID,那么就不能New,要查找到对象;
model.属性1= value1;//
dbContext.Entry(model1).State = EntityState.Modified;//要修改此对象
dbContext.Entry(model1).Property(m=>m.属性1).IsModified = true;//要修改此对象的属性1
dbContext.SaveChange();
***查询操作
var findModel1 = from m in dbContext.Model1
where m.属性1 = value
select m ;
//实事上,执行完此行,并不会马上查询,要使用到findMode1这个变量时才会执行Sql语句去查询
**在查询Model1时,也会查询model1.Model2,并还原为对象。
***
使用
foreach ( var m1 in findModel1)//查询了一次sql语句,将符合属性1 = value的Model1对象查出来遍历
{
foreach(var m2 in m1.Model2)//每次遍历,都会查询一次sql语句 , 根据model2. model1ID == m1.ID来查,
所以Model1.Model2要写成ICollection<Model2>,而不是List<>,因为要执行sql语句的
{
}
}
学习笔记31_ORM框架ModelFirst设计数据库的更多相关文章
- Android:日常学习笔记(10)———使用LitePal操作数据库
Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...
- MongoDB学习笔记(2):数据库操作及CURD初步
MongoDB学习笔记(2):数据库操作及CURD 数据库操作 创建数据库 首先MongoDB中数据库的创建和数据库的切换都是使用命令,USE DATABASE,如果要切换的数据库不存在则会进行创建, ...
- qt学习笔记(七)之数据库简介(所有支持数据库类型的列表)
笔者最近用Qt写公司的考勤机.本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手. 废话不 ...
- Android学习笔记(十六)——数据库操作(上)
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, ...
- java JDK8 学习笔记——第16章 整合数据库
第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...
- EF6 学习笔记(五):数据库迁移及部署
EF6学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 原文地址:Code First Migrations and Deployment 原文主要讲两部分:开发环境下 ...
- Android 学习笔记之如何使用SQLite数据库来保存数据...
PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼... 学习内容: 1.使用SQLite数据库来保存数据... SQLite: ...
- [Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction
1.Spring中的数据库支持 把具有相同功能的代码模板抽取到一个工具类中.2.关于jdbc template的应用 jdbcTemplate模板操作类,把访问jdbc的模板抽取到template中, ...
- [ 学习笔记 ] Hibernate框架学习之一
一.JavaEE开发三层结构和三大框架的对应关系: Struts2框架 -> 表现层 web层(MVC是表现层的设计模型) 业务层 service层 Hibernate框架 -> 持久层 ...
随机推荐
- 如何配置VMware客户虚拟机使用NAT模式联网通信
本例中配置客户虚拟机(CentOS)使用NAT(网络地址转换Network Address Translation)模式进行联网到公网(互联网).客户机网段为192.168.1.0/24网段,经NAT ...
- 【php中的curl】php中curl的详细解说
本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...
- 实战SpringCloud响应式微服务系列教程(第七章)
本章节继续介绍:Flux和Mono操作符(二) 1.条件操作符 Reactor中常用的条件操作符有defaultIfRmpty.skipUntil.skipWhile.takeUntil和takeWh ...
- Spring Cloud Config Server 节点迁移引起的问题,请格外注意这一点!
前言: 虽然强烈推荐选择使用国内开源的配置中心,如携程开源的 Apollo 配置中心.阿里开源的 Nacos 注册&配置中心. 但实际架构选型时,根据实际项目规模.业务复杂性等因素,有的项目还 ...
- pycharm 激活码 2019/11最新福利(2)
812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlT ...
- 02-14 scikit-learn库之逻辑回归
目录 scikit-learn库之逻辑回归 一.LogisticRegression 1.1 使用场景 1.2 代码 1.3 参数详解 1.4 属性 1.5 方法 二.LogisticRegressi ...
- C-01 手写数字识别
目录 手写数字识别应用程序 一.导入模块 二.图像转向量 三.训练并测试模型 四.模型转应用程序 4.1 展示图片 4.2 处理图片 4.3 预测图片 更新.更全的<机器学习>的更新网站, ...
- wx.navigateTo、wx.redirectTo、wx.reLaunch、wx.switchTab和wx.navigateBack的区别
wx.navigateTo.wx.redirectTo.wx.reLaunch.wx.switchTab和wx.navigateBack有什么区别呢? **wx.navigateTo:** 用于保留当 ...
- sudo 提示 'xxx is not in the sudoers file.This incident will be reported.的解决方法'
在使用 Linux 的过程中,有时候需要临时获取 root 权限来执行命令时,一般通过在命令前添加 sudo 来解决. 但是第一次使用 sudo 时,有可能会得到这样一个错误提示 xxx is not ...
- MySQL从库生成大量小的relay log案例模拟
最近看到"八怪"写的<MySQL:产生大量小relay log的故障一例>,因之前也遇到类似的情况,一直没搞懂原理及复现,看完此文章后,本着实践是检验真理的唯一标准的原 ...