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(概要)的更多相关文章

  1. Entity Framework Code First学习系列目录

    Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...

  2. Entity Framework Code First数据库连接

    1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器->程序包管理器控制台,执行以下语句: PM> Insta ...

  3. Entity Framework Code First属性映射约定

    Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...

  4. Entity Framework Code First关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  5. Entity Framework Code First执行SQL语句、视图及存储过程

    1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...

  6. Entity Framework Code First使用DbContext查询

    DbContext.DbSet及DbQuery是Entity Framework Code First引入的3个新的类,其中DbContext用于保持数据库会话连接,实体变化跟踪及保存,DbSet用于 ...

  7. Entity Framework Code First添加修改及删除单独实体

    对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...

  8. Entity Framework Code First实体对象变动跟踪

    Entity Framework Code First通过DbContext.ChangeTracker对实体对象的变动进行跟踪,实现跟踪的方式有两种:变动跟踪快照和变动跟踪代理. 变动跟踪快照:前面 ...

  9. 旧项目如何切换到Entity Framework Code First

    Entity Framework Code First固然是好东西,然而如果是已经存在的旧有项目,如何简单方便的使用切换呢? 这里介绍一个VS的插件Entity Framework Power Too ...

  10. Entity Framework Code First (三)Data Annotations

    Entity Framework Code First 利用一种被称为约定(Conventions)优于配置(Configuration)的编程模式允许你使用自己的 domain classes 来表 ...

随机推荐

  1. 【TOP100案例专访】当当网工程师林嘉琦谈双11大促经验及APM实践

    导读:第七届TOP100全球软件案例研究峰会将于11月30日-12月3日在北京国家会议中心举办,本届峰会以“释放AI生产力 让组织向智能化演进”为开幕式主题,旨在推动企业在趋势下拥抱AI.探索和思考A ...

  2. 基于LSD的直线提取算法

    https://blog.csdn.net/tianwaifeimao/article/details/17678669 文献翻译:https://blog.csdn.net/YuYunTan/art ...

  3. HDU 1506 & 1505 - Largest Rectangle in a Histogram & City Game

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  4. [Day1]常用Dos命令,Java相关描述及基础

    1.常用的DOS命令 (1)返回上一级目录:cd.. (2)返回盘符根目录:cd\ (3)切换当前盘符:   盘符: (4)进入文件夹:       cd 文件路径 (5)展示当前目录下的所有内容:D ...

  5. iOS-静态库,动态库,framework浅析(三)

    创建framework静态库 第一步,新建项目 新建项目.png 第二步,删除系统默认创建的[FMDB.h]和[FMDB.m]文件,导入需要打包的源文件. 导入源码后的工程.png 第三步,修改项目配 ...

  6. iOS - 常用的CG结构体

    CGPoint.CGSize.CGRect.CGRectEdge实际上都是结构体 一,几个常用的结构体 CGPoint   定义一个点,设置x坐标和y坐标 struct CGPoint { CGFlo ...

  7. Shell脚本交互之:自动输入密码

    Shell脚本交互之:自动输入密码 2016年04月09日 19:41:26 zhangjikuan 阅读数:58208 标签: Shell交互自动输入密码expect重定向管道 更多 个人分类: A ...

  8. 转:eval(data)和eval("("+data+")")

    http://www.w3school.com.cn/jsref/jsref_eval.asp JavaScript eval() 函数:eval() 函数可计算某个字符串,并执行其中的的 JavaS ...

  9. 关于Sentry(转)

    原文:http://blog.csdn.net/largetalk/article/details/8640854 1. Sentry介绍及使用 Sentry is a realtime event ...

  10. JavaScript学习笔记--语言工具的了解

    基础学习,快速入门资料:网站 https://www.liaoxuefeng.com ,http://www.runoob.com/js/js-tutorial.html 笔记: 编程工具:SubLi ...