Entity Framework(二)
1、 ORM :Object Relation Mapping ,通俗说:用操作对象的方式来操作数据库。
2、 插入数据不再是执行Insert,而是类似于 Person p=new Person() ; p.Age=3;p.Name="wang" ;db.save(p);这样的做法;
3、ORM工具有很多Dapper、PetPoco、NHibermate,首推Entity Framework
4、EF底层还是多ADO.Net的封装.
5、使用EF进行数据库开发的时候有两个东西建立:建数据库,建模型类。根据这两种创建的先后顺序有EF的三种创建方法:
(1) Database First(数据库优先):先创建数据库表,然后自动生成EDM文件,EDM文件生成模型类
(2)Model First (模型优先):先创建Edm文件,Edm文件自动生成模型类和数据库;
(3)Code First(代码优先):自己写模型类,然后生成数据库,没有EDM。
6、EF安装
(1)基础阶段用控制台项目,使用Nuget安装EntityFramework 会自动再APP'config 中增加两个EntityFramework相关的配置;
(2)在web.cong中配置链接字符串:
<connectionStrings>
<add name="connstr" connectionString=" Data Source=.; Initial Catalog=Test2; User Id=sa; Password=123; " providerName="System.Data.SqlClient" />
</connectionStrings>
7、 EF简单DataAnnotations实体配置
(1)数据库创建表:T_Persons,有Id(主键,自动增长) ,Name,CreateDateTime;
(2)创建Person类
[Table("T_Persons")] //因为和表名不一样,所以要使用Table标注;
public class Person
{
public long Id { get; set; }
public string Name { get; set; }
public DateTime CreateDateTime { get; set; }
}
因为EF约定的主键是Id,所以不用再特殊指定Id为主键,如果非要指定就用[Key] .因为字段名和属性名一样,所以不用再特殊指定关系,如果需要[Column("Name")].
必填字段标注[Required]、字段长度[MaxLength(5)] 、可空字段 int? 、如果字段再数据库中有默认值,则要再属性上标注[DatabaeGenerated] 注意实体类要写成public ,否则后面会有麻烦;
(3)创建 DbContext 类(模型类、实体类)
public class TestDbContext:DbContext
{
public TestDbContext():base("name=connstr")//name=connstr 表示使用连接字符串中名字为connstr的数据库
{ }
public DbSet<Person> Persons { get; set; }
}
(4)测试:
static void Main(string[] args)
{
using (TestDbContext ctx = new TestDbContext())
{
Person p1 = new Person()
{
CreateDateTime = DateTime.Now,
Name = "wang"
};
ctx.Persons.Add(p1);
ctx.SaveChanges();
}
}
注意: MyDbConnect 对象是否需要using有争议,不using也没事,每次用的时候new MyDbConnect就行,不用共享同一实例,共享反而会有问题。saveChanges()才会更新到数据库中。EF开发团队都说要using,很多人不用,只是想利用LazyLoad而已,但是那样做是违反分层的原则的。习惯用using
8、 EF模型的两种配置方式:
EF中的模型类有两种配置方式:DataAnnotations、FluentAPI两种。上面这种在模型类上[Table"T_Person")]、[Column("Name")]这种方式就叫 DataAnnotations。这种方式方便,但是耦合度太高,一般的类最好是POCO(就是一个普通的类),不符合大项目开发的要求。微软推荐使用FluentAPI,因此主要用FluentAPI
Entity Framework(二)的更多相关文章
- Entity Framework二、 模型优先 ,ObjectContext类
https://www.cnblogs.com/ejiyuan/archive/2009/05/27/1490786.html 1.ObjectContext 封装.NET Framework和数据库 ...
- Entity Framework (二) 查询
待完善-------------------------------------- ----------- base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建 ...
- Entity Framework 二
本篇主要介绍:创建了实体数据模型,生成了那些文件以及其代表意义 创建实体数据模型 上一篇的最后,我们创建了数据库,现在我们利用数据库来生成我们的实体数据模型,这种形式我们称为数据库优先,后面会介绍代码 ...
- entity framework 新手入门篇(1)-建立模型
entity framework是微软官方免费提供给大家的一套ORM(Object Relational Mapping对象关系映射)解决方案.它不仅可以帮助我们解决数据缓存的问题,还能在最小的开销下 ...
- Entity Framework 程序设计入门二 对数据进行CRUD操作和查询
前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...
- C# ORM—Entity Framework 之Code first(代码优先)(二)
一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...
- Entity Framework Code First (二)Custom Conventions
---------------------------------------------------------------------------------------------------- ...
- Entity Framework学习笔记(二)----CRUD(1)
请注明转载地址:http://www.cnblogs.com/arhat 这篇文章老魏和大家分享一下Entity Framework的CRUD操作,在这之前呢,老魏先说一下老魏对EF的一个整体的认识, ...
- Mvc5+Entity Framework6 之二----在MVC中用Entity Framework实现基本的CRUD
目标:创建控制器和视图的代码,实现CRUD(创建,读取,更新,删除)功能 创建一个详细信息页 控制器为Students的Index页生成的代码排除Enrollments属性在外,因为该属性中关联着一个 ...
- Entity Framework笔记(二)
前几日学习了在VS2010Console项目中使用Entity Framework,并且使用Code First模式.通过编写Model类,来生成数据库对应的表.并且,往表中写入数据以及获取表中的所有 ...
随机推荐
- 两次DFS,POJ(1481)
题目链接:http://poj.org/problem?id=1481 两次DFS,这里的思路是,没找到*,就说明,有一个骰子,因此,每搜索到一个*,深搜4个方向,并且变为'.',要是搜到'X',就是 ...
- 【转】Android的setTag
前言 首先我们要知道setTag方法是干什么的,SDK解释为 Tags Unlike IDs, tags are not used to identify views. Tags are essent ...
- centos 7jenkin+git 安装
jenkins+git配置 背景:用git管理源代码,所以需要jenkins安装Git Plugin插件配置 准备: 1.linux环境git客户端 2.jenkins环境 + git plugin插 ...
- map和set的遍历
map: 1.通过获取Entry: Entry的iterator for(Map.Entry<Float,String> entry : map.entrySet()) { System ...
- 一步步做程序优化-讲一个用于OpenACC优化的程序(转载)
一步步做程序优化[1]讲一个用于OpenACC优化的程序 分析下A,B,C为三个矩阵,A为m*n维,B为n*k维,C为m*k维,用A和B来计算C,计算方法是:C = alpha*A*B + beta* ...
- SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)
使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. Quartz的4个核心概念: 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法v ...
- RHEL7.X安装12.2RAC时root.sh错误CLSRSC-400的解决方案
问题现象: [root@ora12c ghome]# /opt/oracle/ghome/root.sh Performing root user operation. The following e ...
- java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量
package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...
- 简单webservice实现(xFire1.2)
基于xfire实现webservice的实例 首先下载xfire的jar包,并导入项目当中 下载地址:http://xfire.codehaus.org/Download 编写实现类 首先建一个接口把 ...
- Docker虚拟化容器的使用
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...