iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NET Core使用EF为关系数据库建模
  • 893
分享到

ASP.NET Core使用EF为关系数据库建模

2024-04-02 19:04:59 893人浏览 八月长安
摘要

目录1.简介2.表映射2.1约定2.2数据注释2.3Fluent api3.列映射3.1约定3.2数据注释3.3Fluent API4.数据类型4.1约定4.2数据注释4.3Flue

1.简介

一般而言,本部分中的配置适用于关系数据库。安装关系数据库提供程序时,此处显示的变为可用扩展方法(原因在于共享的Microsoft.EntityFrameworkCore.Relational包)。

2.表映射

表映射标识在数据库中哪张表应该进行内容查询和保存操作。

2.1约定

按照约定,每个实体将设置为映射到名称与DbSet<TEntity> 属性(公开派生上下文中的实体)相同的表中。如果给定DbSet<TEntity>实体中不包含,则使用类名称。

2.2数据注释

可以使用数据注释来配置类型映射表。

[Table("blogs")]
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

你还可以指定表所属的架构(数据库)。

[Table("blogs", Schema = "blogging")]
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

2.3Fluent API

你可以使用熟知的API来配置类型映射到的表。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .ToTable("blogs");
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

你还可以指定表所属的架构(数据库)。

modelBuilder.Entity<Blog>().ToTable("blogs", schema: "blogging");

3.列映射

列映射标识在数据库中应从哪些列数据中进行查询和保存。

3.1约定

按照约定,每个属性将会设置为映射到与属性具有相同名称的列。

3.2数据注释

可以使用数据注释来配置属性映射到的那一列。

namespace EFModeling.DataAnnotations.Relational.Column
{
    class MyContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
    }
    public class Blog
    {
        [Column("blog_id")]
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
}

3.3Fluent API

您可以使用熟知的API来配置属性映射到的列。

namespace EFModeling.FluentAPI.Relational.Column
{
    class MyContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Blog>()
                .Property(b => b.BlogId)
                .HasColumnName("blog_id");
        }
    }
    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
}

4.数据类型

数据类型是指属性所映射到的列的数据库特定类型。

4.1约定

按照约定,数据库提供程序基于属性的.net类型选择数据类型。它还会考虑其他元数据,如配置的最大长度、属性是否是主键的一部分等。例如,SQL Server的DateTime、nvarchar(max) 用作键的属性。

4.2数据注释

您可以使用数据注释为列指定精确的数据类型。例如,下面的代码将Url配置为一个非unicode字符串,其最大200长度。Rating为5至2小数位。

public class Blog
{
    public int BlogId { get; set; }
    [Column(TypeName = "varchar(200)")]
    public string Url { get; set; }
    [Column(TypeName = "decimal(5, 2)")]
    public decimal Rating { get; set; }
}

4.3Fluent API

你还可以使用熟知的API为列指定相同的数据类型。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>(eb =>
        {
            eb.Property(b => b.Url).HasColumnType("varchar(200)");
            eb.Property(b => b.Rating).HasColumnType("decimal(5, 2)");
        });
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public decimal Rating { get; set; }
}

5.主键

为每个实体类型的键引入primary key(主键)约束。

5.1约定

按照约定,会将数据库中的主键命名为PK_<type name>。

5.2数据注释

不能使用数据批注配置主键的关系数据库的特定方面。

5.3Fluent API

你可以使用API在数据库中配置primary key(主键)约束的名称。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasKey(b => b.BlogId)
            .HasName("PrimaryKey_BlogId");
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

6.默认架构

如果没有为该对象显式配置架构,则默认架构为将在其中创建对象的数据库架构。

6.1约定

按照约定,数据库提供程序将选择最适合的默认架构。例如,Microsoft sql Server将使用dbo架构,而且sqlite将不使用架构(因为sqlite不支持架构)。

6.2数据注释

不能使用数据批注设置默认架构。

6.3Fluent API

可以使用API来指定默认架构。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("blogging");
    }
}

7.默认值

如果插入新行,但没有为该列指定值,则列的默认值为要插入的值。

7.1约定

按照约定,未配置默认值。

7.2数据注释

不能使用数据批注设置默认值。

7.3Fluent API

你可以使用API指定属性的默认值。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Rating)
            .HasDefaultValue(3);
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public int Rating { get; set; }
}

还可以指定用于计算默认值的SQL片段。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Created)
            .HasDefaultValueSql("getdate()");
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public DateTime Created { get; set; }
}

8.索引(关系数据库)

关系数据库中的索引映射到与实体框架核心中的索引相同的概念。

8.1约定

按照约定,索引命名为IX_<type name>_<property name>。对于复合索引<property name>,将成为以下划线分隔的属性名称列表。

8.2数据注释

不能使用数据批注配置索引。

8.3Fluent API

你可以使用熟知的API来配置索引的名称。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .HasName("Index_Url");
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

你还可以指定筛选器。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .HasFilter("[Url] IS NOT NULL");
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

使用SQL Server提供程序EF为唯一索引中包含的所有可以为null的列添加"IS NOT NULL"筛选器。若要重写此约定,可以null提供一个值。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .IsUnique()
            .HasFilter(null);
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

在SQL Server索引中包含列,当查询中的所有列都作为键列或非键列包含在索引中时,可以通过包含列配置索引以显著提高查询性能。

class MyContext : DbContext
{
    public DbSet<Post> Posts { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Post>()
            .HasIndex(p => p.Url)
            .IncludeProperties(p => new
            {
                p.Title,
                p.PublishedOn
            })
            .HasName("Index_Url_Include_Title_PublishedOn");
    }
}
public class Post
{
    public int PostId { get; set; }
    public string Url { get; set; }
    public string Title { get; set; }
    public DateTime PublishedOn { get; set; }
}

到此这篇关于ASP.net core使用EF为关系数据库建模的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: ASP.NET Core使用EF为关系数据库建模

本文链接: https://www.lsjlt.com/news/145287.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core使用EF为关系数据库建模
    目录1.简介2.表映射2.1约定2.2数据注释2.3Fluent API3.列映射3.1约定3.2数据注释3.3Fluent API4.数据类型4.1约定4.2数据注释4.3Flue...
    99+
    2024-04-02
  • ASP.NET Core如何使用EF为关系数据库建模
    本文小编为大家详细介绍“ASP.NET Core如何使用EF为关系数据库建模”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.NET Core如何使用EF为关系数据库建模”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-06-29
  • ASP.NET Core使用EF创建关系模型
    目录1.关系2.术语定义3.约定4.完全定义的关系5.无外键属性6.单个导航属性7.数据注释7.1ForeignKey7.2InverseProperty8.Fluent API8....
    99+
    2024-04-02
  • ASP.NET Core怎么使用EF创建关系模型
    今天小编给大家分享一下ASP.NET Core怎么使用EF创建关系模型的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-06-29
  • ASP.NET Core基于现有数据库创建EF模型
    1.简介 Entity Framework Core可通过数据库提供给应用程序的插件访问许多不同的数据库。我们可以通过使用Entity Framework Core构建执行基本数据访...
    99+
    2024-04-02
  • ASP.NET Core怎么使用EF创建模型
    这篇文章主要介绍“ASP.NET Core怎么使用EF创建模型”,在日常操作中,相信很多人在ASP.NET Core怎么使用EF创建模型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP...
    99+
    2023-06-29
  • ASP.NET Core使用EF查询数据
    1.查询生命周期 在进入正题时候,我们先来了解EF Core查询的生命周期。 1.1LINQ查询会由Entity Framework Core处理并生成给数据库提供程序可处理的表示形...
    99+
    2024-04-02
  • ASP.NET Core使用EF创建模型的方法
    这篇文章主要介绍“ASP.NET Core使用EF创建模型的方法”,在日常操作中,相信很多人在ASP.NET Core使用EF创建模型的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”A...
    99+
    2023-06-29
  • ASP.NET Core中如何使用EF创建模型
    本文小编为大家详细介绍“ASP.NET Core中如何使用EF创建模型”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.NET Core中如何使用EF创建模型”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-29
  • ASP.NET Core使用EF SQLite对数据库增删改查
    目录1新建ASP.NETCoreMVC应用1.1新建MVC应用1.2引入NuGet包引入教程依赖项2新建模型和上下文2.1新建模型类2.2新建上下文步骤1步骤2步骤33配置服务1直接...
    99+
    2024-04-02
  • ASP.NET Core怎么使用EF SQLite对数据库增删改查
    这篇文章将为大家详细讲解有关ASP.NET Core怎么使用EF SQLite对数据库增删改查,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1 新建ASP.NET Cor...
    99+
    2023-06-26
  • ASP.NET Core使用EF创建模型(索引、备用键、继承、支持字段)
    目录1.索引1.1约定1.2数据批注1.3Fluent API2.备用键2.1约定2.2数据注释2.3Fluent API3.继承3.1约定4.支持字段4.1约定4.2数据注释4.3...
    99+
    2024-04-02
  • .NET Core使用EF生成数据库出错怎么解决
    这篇文章主要介绍“.NET Core使用EF生成数据库出错怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.NET Core使用EF生成数据库出错怎么解决”文章能帮助大家解...
    99+
    2023-06-26
  • ASP.NET Core使用EF创建模型(包含属性、排除属性、主键和生成值)
    目录1.什么是Fluent API?2.包含属性和排除属性2.1包含属性2.2排除属性2.2.1数据批注2.2.2Fluent API3.主键3.1数据批注3.2Fluent API...
    99+
    2024-04-02
  • 使用EF的Code First模式操作数据库
    EF的核心程序集位于System.Data.Entity.dll和System.Data.EntityFramework.dll中。支持CodeFirst的位于EntityFrame...
    99+
    2024-04-02
  • Entity Framework Core基于数据模型创建数据库
    1.简介 使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序。使用迁移(Migrations)基于数据模型创建数据库,你可以...
    99+
    2024-04-02
  • 分布式系统中如何使用ASP.NET Core来处理大规模NumPy数据?
    随着科学技术的不断发展,数据处理已经成为了许多领域的重要工作。在大数据时代,处理数据的规模越来越大,需要使用分布式系统来提高处理效率。本文将介绍如何使用ASP.NET Core来处理大规模NumPy数据。 一、什么是NumPy? NumP...
    99+
    2023-10-02
    numy 存储 分布式
  • Asp.Net Core中如何创建多DbContext并迁移到数据库
    这篇文章给大家分享的是有关Asp.Net Core中如何创建多DbContext并迁移到数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  在我们的项目中我们有时候需要在我们的项目中创建DbContext,而...
    99+
    2023-06-07
  • Asp.net core怎么利用dynamic简化数据库访问
    这篇文章主要介绍“Asp.net core怎么利用dynamic简化数据库访问”,在日常操作中,相信很多人在Asp.net core怎么利用dynamic简化数据库访问问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-07-02
  • ASP.NET Core扩展库之Http请求模拟功能的使用
    目录一、在服务端使用 二、在单元测试中使用 三、示例     如今,完全独立的业务应用几乎不存在,不管是在企业内部微服务之间的调用,还是与外部...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作