Code First 一

Code-First和我们的数据库优先方式是相反的,数据库优先是通过数据库映射出相应的类和上下文,Code-First测试通过创建的类和上下文得到相应的数据库。

Code-First主要用于领域驱动设计使用Code-First方法,您可以专注于域设计,并根据您的域要求开始创建类而不是先设计数据库,然后创建与您的数据库设计相匹配的类Code-First API将根据您的实体类和配置实时创建数据库。对于程序员而言这样方便了很多,我们可以把注意力集中在代码上面而不用去管数据库。

基本的工作流程将是:

编写应用程序域类和上下文类

配置域类以获得额外的映射需求

按F5运行应用程序

Code First API创建新数据库或使用域类映射现有数据库

将种子默认/测试数据插入数据库

最后启动应用程序

例如:

  新建一个控制台,安装EF框架,准备做测试。

①创建相关的类,一个类对应数据库的一张表

②创建上下文

 

③配置文件

④F5运行,运行成功会在数据库中自动创建数据库和表

默认规则集:

   按照规则做了就会达到相应的目的。

  例如:

 ① 类型约定: 上下文中使用DbSet<TEntity>类型属性,或者在DbSet类的里面存在引用类型,而没有出现在上下文中,会在数据库中创建表

  

② 主键约定:

 属性名称是Id或<类名> Id(不区分大小写),则EF会为属性创建主键。主键属性的数据类型可以是任何内容,但是如果是数字或GUID,那么它将被配置为数据库中的标识列。

如果您已经定义了除Id或<ClassName> Id以外的关键属性,则将抛出ModelValidationException。

注意:每个实体类必须在实体框架中包含关键属性。

③关系约定

EF 6默认使用导航属性来推断一对多关系。

注意: EF 6不包括一对一和多对多关系的默认约定。您需要使用Fluent API或DataAnnotation进行配置。我们在后面会详细介绍。

④外键约定

我们已经在上面看到Code First在遇到导航属性时会自动插入一个外键建议在关系的依赖端包含一个外键属性。

 约定:

数据库初始化:  第一个例子就是利用链接字符串来初始化的

上下文类的基础构造函数可以具有以下参数。

  1. 没有参数
  2. 数据库名称
  3. 连接字符串名称

没有参数

如果您没有在上下文类的基础构造函数中指定参数,那么它将在本地SQLEXPRESS服务器中创建一个名称与您的{Namespace}。{Context class name}匹配的数据库。例如,Code First将为以下上下文类创建一个名为SchoolDataLayer.Context的数据库: (因为我这边没有安装SQL express所以演示不了)

数据库名称:

 

ConnectionString名称:

原文地址:https://www.cnblogs.com/Sea1ee/p/8058206.html