Entity Framework Code First(概要)
EF开源项目地址:https://github.com/aspnet/EntityFramework6
MSDN :https://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspx
中文:https://msdn.microsoft.com/zh-cn/library/bb399567(v=vs.110).aspx
开始EF
1、安装EF
新建类库项目,打开程序包控制台安装EF
PM>Install-Package EntityFramework
2、配置数据库连接 成功后会在类库项目下自动生成app.config和packages.config(该项目所有包清单),重点看项目配置app.config。给connectionStrings节点添加一个连接
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="Practice" connectionString="Data Source=(localdb)\ProjectsV13;Initial Catalog=Practice.Sample;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
app.config
DbContext
public class PracticeEntitys : DbContext
{
public PracticeEntitys()
: base("Name=Practice")
{ } public new Database Database
{
get { return base.Database; }
} }
DataAnnotation
Table:[ Table("自定义table名")]
Column:[Column("列名",TypeName="varchar")]
Key:设置自定主键,如果不指定该属性,则默认寻找带ID的字段设为主键
DatabaseGenerated表示数据库自动生成,该属性传参数DatabaseGeneratedOption.枚举:Identity:自增长 None:不处理 Computed:表示这一列是计算列
Required:不可为空
NoMapped:不映射某字段加该属性
MaxLength(int)、MinLength(int):设置最大最小长度
ForeignKey("指定列名")和virtual的字段连用设置外键
Index:索引
ComplexType:复杂类型:如可以在下面的commonDate类上加该特性。当然这里推荐使用继承
并发控制:
Timespan和ConcurrentCheck,效果都是一样,原理都是比较当前更新的实体和原数据实体的 对应标识了并发的字段是否一致,不一致就抛出异常
[Table("article")]
public class Article: CommonDate
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Title { get; set; }
public Int64 Click { get; set; }
}
public class CommonDate
{
public DateTime CreateDate { get; set; }
public DateTime ModifyDate { get; set; }
}
迁移 Migration
1、开启迁移:
PM>Enable-Migrations
可选参数:
-EnableAutomaticMigrations:开启自动迁移。开启后configuration.cs会设置自动迁移为true,那么这么做实现什么效果呢?不开启状态下我们需要add-migration 然后update迁移到数据库,并生成对应的Migration结构文件;如果开启自动迁移,那么可以省去add的步骤直接update更新到数据库,但是这样也不会生成Migration的结构文件。结果显而易见正常生产环境不建议开启,一般我这里会设置为false。
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
-ContextTypeName 全限定名:如果一个项目多个Context,用该参数指定
-StartUpProjectName:使用项目,和手动在程序包控制台选择使用项目一样效果
-Force:强制
关于错误:找不到配置字符串
(1)、检查配置文件的名称是否和Dbcontext子类设置的名字一样
(2)、确认字符串的情况下如果还报错,先把类库设置为启动项目

2、添加迁移,自定义命名initdatabase,EF会自动根据上面继承DbContext的类的变化和约定的变化,生成Flut的cs文件到Migration文件夹里,并且会自动加上时间戳。如:时间_自定义名.cs
PM>add-migration initdatabase
3、更新到数据库;执行完上面的语句,数据库仍然是不会变化,接下来把表结构更新到数据库
PM>update-database -verbose
4、批量生成脚本
注意:批量生成的时候注意是按照上面 2里面自动添加的 时间顺序执行的。
PM>Update-Database -Script -SourceMigration:开始Migration.cs -TargetMigration: 结束Migration.cs
可以只指定target参数进行回溯
5、迁移检查
public TestDbContext() : base("name=Default")
{
//不会创建数据库,生产环境建议用这个设置,表通过sql来创建或修改
Database.SetInitializer<TestDbContext>(null);
// 数据库不存在时重新创建数据库,会删除主项目或其他插件的表
Database.SetInitializer<TestDbContext>(new CreateDatabaseIfNotExists<TestDbContext>());
//每次启动应用程序时创建数据库,会删除主项目或其他插件的表
Database.SetInitializer<TestDbContext>(new DropCreateDatabaseAlways<TestDbContext>());
//模型更改时重新创建数据库,会删除主项目或其他插件的表
Database.SetInitializer<TestDbContext>(new DropCreateDatabaseIfModelChanges<TestDbContext>());
}
Fluent API
见上篇:http://www.cnblogs.com/xmai/p/3919494.html
Entity Framework Code First(概要)的更多相关文章
- Entity Framework Code First学习系列目录
Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...
- Entity Framework Code First数据库连接
1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器->程序包管理器控制台,执行以下语句: PM> Insta ...
- Entity Framework Code First属性映射约定
Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...
- Entity Framework Code First关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- Entity Framework Code First执行SQL语句、视图及存储过程
1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...
- Entity Framework Code First使用DbContext查询
DbContext.DbSet及DbQuery是Entity Framework Code First引入的3个新的类,其中DbContext用于保持数据库会话连接,实体变化跟踪及保存,DbSet用于 ...
- Entity Framework Code First添加修改及删除单独实体
对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...
- Entity Framework Code First实体对象变动跟踪
Entity Framework Code First通过DbContext.ChangeTracker对实体对象的变动进行跟踪,实现跟踪的方式有两种:变动跟踪快照和变动跟踪代理. 变动跟踪快照:前面 ...
- 旧项目如何切换到Entity Framework Code First
Entity Framework Code First固然是好东西,然而如果是已经存在的旧有项目,如何简单方便的使用切换呢? 这里介绍一个VS的插件Entity Framework Power Too ...
- Entity Framework Code First (三)Data Annotations
Entity Framework Code First 利用一种被称为约定(Conventions)优于配置(Configuration)的编程模式允许你使用自己的 domain classes 来表 ...
随机推荐
- 关于device tree中的interrupts选项
http://blog.csdn.net/jiang__jiang/article/details/52064715 随着Linux的发展,dts技术是大势所趋.里面的interrupts = < ...
- update-alternatives符号连接的层数过多
ls -l /opt/jdk/bin/java时,显示/opt/jdk/bin/java -> /usr/bin/java ls -l /usr/bin/ava时,显示/usr/bin/java ...
- [No0000EE]主要的宏观经济指标查询
主要的宏观经济指标查询 国内:东财>经济数据 _ 数据中心:http://data.eastmoney.com/center/macro.html东财>经济数据 :http://data. ...
- linux 音频编程
http://blog.csdn.net/sea918/article/details/7249216 1.音频开发模型: OSS(open sound system) linux/unix 平 ...
- prometheus: celery, redis-export
https://github.com/nlighten/tomcat_exporter https://github.com/prometheus/jmx_exporter https://vexxh ...
- ORACLE之PACKAGE-包、存储过程、函数
1,简单的包. 创建包规范: create or replace package pack_test1 is -- 定义过程1 procedure p_test1(p_1 in varchar2); ...
- 查找->静态查找表->次优查找(静态树表)
文字描算 之前分析顺序查找和折半查找的算法性能都是在“等概率”的前提下进行的,但是如果有序表中各记录的查找概率不等呢?换句话说,概率不等的情况下,描述查找过程的判定树为何类二叉树,其查找性能最佳? 如 ...
- Sublime_text编辑器插件安装
Sublime_text 3下载与安装详细教程 参考: https://blog.csdn.net/weixin_40682842/article/details/78727266 http://ww ...
- es6原型的继承
class Parent { name = 'liangcheng'; } const parent = new Parent(); console.log(parent); // 类继承某实例对象属 ...
- oracle稳定执行计划(更改)的方法
应用于那些执行计划已经发生了的不好的变更的SQL上(在不改变SQL文本的情况下,改变其执行计划),即便通过创建SQL Profile解决了目标SQL执行计划变更的问题,依然不能保证系统后续执行的SQL ...