Entity Framework Fluent API

简介: 前言 使用DataAnnotation非常简单,但对于EntityFramework中的特性,就要在实体类中引入EntityFramework程序集,但实体类最好能是保持与架构无关性的POCO类,才能更具通用性。

前言

使用DataAnnotation非常简单,但对于EntityFramework中的特性,就要在实体类中引入EntityFramework程序集,但实体类最好能是保持与架构无关性的POCO类,才能更具通用性。所以,最好是在数据层中使用FluentAPI在数据层中进行实体类与数据库之间的映射工作。从功能上而言Data Annotations是Fluent API的一个子集, Data Annotations可以实现的功能Fluent API都能实现。

Fluent API特性列举

 当然,System.ComponentModel.DataAnnotations命名空间的DataAnnotation在EntityFramework程序集中也有相应的API:

设置属性需要在数据库操作上下文的

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

1.HasKey - KeyAttribute:配置此实体类型的主键属性

            modelBuilder.Entity<Order>().HasKey(order => order.OrderID);

2.IsRequired - RequiredAttribute:将此属性配置为必需属性。用于存储此属性的数据库列将不可以为null

modelBuilder.Entity<Order>().HasRequired(order => order.OrderName);

3.HasMaxLength - MaxLengthAttribute:将属性配置为具有指定的最大长度

modelBuilder.Entity<Order>().Property(order => order.OrderName).HasMaxLength(30);

 4.IsConcurrencyToken - ConcurrencyCheckAttribute:将属性配置为用作开放式并发标记

modelBuilder.Entity<Order>().Property(order => order.Address).IsConcurrencyToken();

5.IsRowVersion - TimestampAttribute:将属性配置为数据库中的行版本。实际数据类型将因使用的数据库提供程序而异。将属性设置为行版本会自动将属性配置为开放式并发标记。

modelBuilder.Entity<Order>().Property(order => order.TimeStamp).IsRowVersion();//通过指定“TimeStamp”进行并发版本控制

上面这些API均无需引用EntityFramework,推荐使用DataAnnotation方式来设置映射。以下API的DataAnnotation特性是在EntityFramework中定义,如果也使用DataAnnotation方式来设置映射,就会给实体类增加额外的第三方程序集的依赖。所以以下API的映射推荐使用FluentAPI的方式来设置映射

6.ToTable - TableAttribute:配置此实体类型映射到的表名

modelBuilder.Entity<Order>().ToTable("Order", "Order");//指定“Order”对应表名及架构

7.HasColumnName - ColumnAttribute:配置用于存储属性的数据库列的名称

modelBuilder.Entity<Order>().Property(order => order.Note).HasColumnName("Notes").HasColumnType("ntext");//指定“Note”对应列名为“Notes”,并指定数据类型

8.HasForeignKey - ForeignKeyAttribute:将关系配置为使用在对象模型中的外键属性。如果未在对象模型中公开外键属性,则使用Map方法

modelBuilder.Entity<Order>().HasRequired(order => order.customer).WithMany().HasForeignKey(order => order.CustomerNo);

9. Ignore - NotMappedAttribute:从模型中排队某个属性,使该属性不会映射到数据库

modelBuilder.Entity<Order>().Ignore(order => order.PhotoPath);

10.HasRequired:通过此实体类型配置必需关系。除非指定此关系,否则实体类型的实例将无法保存到数据库。数据库中的外键不可为null。

modelBuilder.Entity<Order>().HasRequired(order => order.customer);

 11.Map:将关系配置为使用未在对象模型中公开的外键属性。可通过指定配置操作来自定义列和表。如果指定了空的配置操作,则约定将生成列名。如果在对象模型中公开了外键属性,则使用 HasForeignKey 方法。并非所有关系都支持在对象模型中公开外键属性。

modelBuilder.Entity<Order>().HasRequired(c => c.customer).WithMany().Map(m => m.MapKey("CustomerOrder"));

 12.MapKey:配置外键的列名。

同上。。

 

 

 

目录
相关文章
|
存储 API 网络架构
【Azure 存储服务】调用REST API获取Stroage Account Table中所有的Entity计数 -- Count
【Azure 存储服务】调用REST API获取Stroage Account Table中所有的Entity计数 -- Count
153 1
|
人工智能 Java API
ChatClient:探索与AI模型通信的Fluent API
【11月更文挑战第22天】随着人工智能(AI)技术的飞速发展,越来越多的应用场景开始融入AI技术以提升用户体验和系统效率。在Java开发中,与AI模型通信成为了一个重要而常见的需求。为了满足这一需求,Spring AI引入了ChatClient,一个提供流畅API(Fluent API)的客户端,用于与各种AI模型进行通信。本文将深入探讨ChatClient的底层原理、业务场景、概念、功能点,并通过Java代码示例展示如何使用Fluent API与AI模型进行通信。
562 8
|
存储 API 数据库
如何使用 ef core 的 code first(fluent api)模式实现自定义类型转换器?
本文介绍了如何在 EF Core 的 Code First 模式下使用自定义类型转换器实现 JsonDocument 和 DateTime 类型到 SQLite 数据库的正确映射。通过自定义 ValueConverter,实现了数据类型的转换,并展示了完整的项目结构和代码实现,包括实体类定义、DbContext 配置、Repositories 仓储模式及数据库应用迁移(Migrations)操作。
276 7
如何使用 ef core 的 code first(fluent api)模式实现自定义类型转换器?
|
人工智能 Java API
Spring AI Fluent API:与AI模型通信的流畅体验
【11月更文挑战第24天】随着人工智能(AI)技术的飞速发展,越来越多的应用场景开始融入AI技术以提升用户体验和系统效率。在Java开发中,与AI模型通信成为了一个重要而常见的需求。为了满足这一需求,Spring AI引入了ChatClient,一个提供流畅API(Fluent API)的客户端,用于与各种AI模型进行通信。本文将深入探讨ChatClient的底层原理、业务场景、概念、功能点,并通过Java代码示例展示如何使用Fluent API与AI模型进行通信。
393 0
|
存储 JSON API
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
133 0
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
|
API Android开发
Android Framework增加API 报错 Missing nullability on parameter
Android Framework增加API 报错 Missing nullability on parameter
708 1
|
API 网络架构 Python
【Django | 开发】 Rest Framework 开放API
【Django | 开发】 Rest Framework 开放API
【Django | 开发】 Rest Framework 开放API
|
XML Java 关系型数据库
API公共模块和部门 Entity 步骤|学习笔记
快速学习 API 公共模块和部门 Entity 步骤
API公共模块和部门 Entity 步骤|学习笔记
|
IDE API 开发工具
Yii Framework 2.0 API 文档是干什么的?底层原理是什么?
Yii Framework 2.0 API 文档是干什么的?底层原理是什么?
182 0
|
机器学习/深度学习 关系型数据库 API
DB表的关系及EF中Fluent API的使用
DB表的关系及EF中Fluent API的使用
248 0
DB表的关系及EF中Fluent API的使用
下一篇
oss云网关配置