实体框架(EF)核心是一种常用的实体框架数据访问技术,用于轻巧,可扩展,开源和跨平台版本。在程序中的类别与数据库中的表面之间建立了映射关系。,EFCORE中的属性配置尤为重要。它是学习ASP.NET核心的基础,是配置数据库表结构的重要基石。本文的内容是学习和组织MicrosoftDoc。
EF Core可以用作对象关系映射程序(O/RM),可以实现以下两个方面:
EF Core支持多个数据库引擎,可以通过插件库访问许多不同的数据库。应用于EF Core 2.2,但不适用于EF Core 3.0。
使用实体框架核心(EF Core)时,典型的工作单元包括:
1.创建一个DBContext实例以根据上下文跟踪实体实例。将在以下情况下跟踪实体
您可以在“启动”的配置服务方法中使用addBcontext。
本质
此示例将在ASP.NET Core中注册dbContext子类命名applicationdbcontext以注册ASP.NET Core Application Service Service Service Service(也称为容器注入容器)。将从ASP.NET核心配置中读取。通常在configureservices中调用AddDbContext的位置通常并不重要< ApplicationDbContext> &gt parameters的公共构造函数。这是将adddbContext上下文上下文传递给dbcontext的方法:示例:。
然后,ApplicationDbContext可以通过构造构造函数在ASP.NET Core Controller或其他服务中使用。例如:。
最终结果是为每个请求创建一个ApplicationDBContext实例,并将其传递给控制器以在发布请求之前执行工作单位。
您可以根据常规.NET方法构造DBContext实例,例如,使用新的C#中的新实例。您可以通过重写OnConfiguering方法或将选项传递给构造函数来执行配置。例如:例如:
通过此模式,可以通过DBContext构造函数轻松地传输配置(例如连接字符串)。例如:
另外,您可以使用dbcontextoptionsbuileder创建dbContextOptions对象,然后将对象传递到dbContext构造函数。此允许将dbContext配置为依赖关系的dbContext,例如,当ApplicationDBContext由Web应用程序定义为Web Application with ApplicationDbContext使用ASP.NET Core:app.net coreplaceDbContext定义。
实体框架核心使用一组商定的同意来基于物理类的形状生成模型。可以指定其他配置来补充和/或替换协议。
模型配置主要分为两种方法:
如果您有多个需要配置的手表。为了减少弹药方法的大小,可以将物理类型的所有配置提取到实现IentityTypececonfigution的单个类别中。
然后,只需从OnModelCreating调用配置方法即可。
它也可用于实现IentityTypececonfution类型中指定的所有配置。
应用程序配置的顺序尚不确定,因此仅在订单不重要时才应使用此方法。
功能(称为数据注释)也可以应用于类和属性。数据注释将替换协议,但将被流利的API配置替换。
在上下文中包含一种DBSET类型,这意味着它包含在EF核心模型中。我们通常将此类型称为Entities.ef Core可以从/到数据库中读取并写入实体实例。如果使用了关系数据库,则EF核心可以通过迁移到实体创建表。根据协议,模型中包括DBSET属性上下文中的披露类型。它还包括指定的任何类型的物理类型在弹药制作方法以及递归中其他类型的物理类型的任何类型的导航属性中。以下代码示例包含所有类型:
公共类博客{public int blogid {get;set;}公共字符串url {get;放;}
}
公共班级文章{public int postid {get;set;}公共字符串标题{get;set;}公共字符串内容{get;放;}
}
公共类AuditEntry {public int AuditEntryId {get;set;} public string用户名{get;set;} public string action {get;放;}}
使用关系数据库时,数据库提供商会根据属性的.NET类型选择数据类型。on。例如,SQL Server将DateTime属性映射到DateTime2(7)列(7),然后将字符串属性映射到NVARCHAR(MAX)列(或用于NVARCHAR(450)键的属性)。您还可以配置列以指定确切的数据类型。例如,以下代码将URL配置为非unicode字符串,最大长度为200,并配置为十进制。它的精度为5,小数位数为2:Fluent API。
配置最大长度可以提供一个提示,该提示可以提供数据库提供商提供提示以选择适当的数据类型以提供给定属性。最大长度仅适用于数组数据类型,例如字符串和字节[]在下面的示例中,最大长度到500将导致SQL Server上的NVarchar(500)类型的创建:以下显示一些。
某些关系数据类型支持准确性和十进制数字的方面,它们用于控制可以存储哪些值以及需要多少存储。数据类型支持准确性和十进制数字取决于数据库,但在大多数数据库中,十进制和数据库中类型支持这些面。对于十进制属性,精度用于定义任何值表示列的最大数字,并使用小数数字来定义所需的最大小数字。对于DateTime属性,准确性用于定义第二个小数部分所需的最大数字,并且不使用小数位数。在下面的示例中,将分数属性配置为14的精度,将十进制数字配置为2,将列列出,这将导致列创建列SQL Server上的十进制(14,2)类型。将最后一个属性限制为准确性将导致DateTime的创建2(3 3(3)类型:。
EF Core 5.0引入了Fluent API以进行配置精度和小数位数。如果您不首先定义准确性,则永远不会定义小数位数,因此用于定义小数位数的流利API是HaspreCision(精度,比例)。
在某些关系数据库中,存在不同类型以表示UNICODE和非unicode文本数据。例如,在SQL Server中,NVarchar(X)用于表示UTF -16中的Unicode数据,而VARCHAR(X)用于指示非unicode数据(但请参见相关的UTF-8支持)SQL Server Description。对于不支持此概念的数据库,配置此概念将不起作用。
默认情况下,文本属性配置为unicode。
如果属性包含null是有效的,则该属性被视为可选属性。如果null不是分配属性的有效值,则将其视为必要的属性。当映射到关系数据库体系结构时,将创建必要的属性为一列不能为null,并且可选属性是作为可以为null的列创建的。根据该协议,其.NET类型可以包含可选属性的null属性,而.NET类型不能在必要时配置NULL属性属性。例如,使用.NET值类型等配置所有属性(int小数bool,)等。type(nrt)。此功能允许参考类型的注释来指示参考类型是否可以包括null。默认情况下此功能处于残疾状态。它将通过以下方式影响EF。HAVIOR:可以无效的禁止类型。
启用可能为null的参考类型。
具有可选属性的属性可以配置为必要的属性,如下所示:
本质
在关系数据库中,可以为列配置默认值。如果插入的行没有列的值,则将使用默认值。
您可以在属性上配置默认值:。
您还可以指定用于计算默认值的SQL片段:。
在大多数关系数据库中,可以配置该列以计算其在数据库中的值,并且通常使用其他列的表达:
上面的命令将创建一个虚拟计算列,并将每次从数据库中提取该值。您还可以将计算列指定为存储(有时称为持久性),这意味着系统将计算系统每次更新更新时列,并将其用常规列存储在磁盘上:
EF Core将自动设置主键的值 - 但是我们可能希望在非key属性上执行相同的操作。您可以配置任何属性以生成其插入实体的值,如下所示:
要警告说,如果要生成显式值的替换值,则只需要将属性设置为属性类型的CLR默认值(字符串为null,int to int to 0,guid.guid.empt.empty等。)。
6.3.1。默认情况下将显式值插入身份列中,它将无法尝试将显式值插入SQL Server身份,因为SQL Server不允许将显式值插入身份列中。在调用savechanges()之前,Identity_insert,如下所示:
启用Identity_insert。
原始:https://juejin.cn/post/7095288086480814116