iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ASP.NET Core使用EF创建模型的方法
  • 288
分享到

ASP.NET Core使用EF创建模型的方法

2023-06-29 21:06:38 288人浏览 独家记忆
摘要

这篇文章主要介绍“asp.net Core使用EF创建模型的方法”,在日常操作中,相信很多人在ASP.net Core使用EF创建模型的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”A

这篇文章主要介绍“asp.net Core使用EF创建模型的方法”,在日常操作中,相信很多人在ASP.net Core使用EF创建模型的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET Core使用EF创建模型的方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.索引

索引是跨多个数据存储区的常见概念。尽管它们在数据存储中的实现可能会有所不同,但也可用于基于列(或一组列)更高效地进行查找。

1.1约定

按照约定,将在用作外键的每个属性(或一组属性)中创建索引。

1.2数据批注

不能使用数据批注创建索引。

1.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);    }}public class Blog{    public int BlogId { get; set; }    public string Url { get; set; }}

您还可以指定索引应是唯一的,这意味着对于给定的属性,不能有两个实体具有相同的值。

modelBuilder.Entity<Blog>().HasIndex(b => b.Url).IsUnique();

您还可以为多个列指定索引。

class MyContext : DbContext{    public DbSet<Person> People { get; set; }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        modelBuilder.Entity<Person>()            .HasIndex(p => new { p.FirstName, p.LastName });    }}public class Person{    public int PersonId { get; set; }    public string FirstName { get; set; }    public string LastName { get; set; }}

2.备用键

备用键与主键相对,用作每个实体实例的备用唯一标识符。备用键可用作关系的目标。使用关系数据库时,这将映射到备用键列上的唯一索引/约束和引用列的一个或多个外键约束的概念。系统通常会在需要时为你引入备用键,你无需手动配置它们。

2.1约定

按照约定,系统将在识别属性(不是主键)时为你引入备用键,充当关系的目标。

class MyContext : DbContext{    public DbSet<Blog> Blogs { get; set; }    public DbSet<Post> Posts { get; set; }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        modelBuilder.Entity<Post>()            .HasOne(p => p.Blog)            .WithMany(b => b.Posts)            .HasForeignKey(p => p.BlogUrl)            .HasPrincipalKey(b => b.Url);    }}public class Blog{    public int BlogId { get; set; }    public string Url { get; set; }        public List<Post> Posts { get; set; }}public class Post{    public int PostId { get; set; }    public string Title { get; set; }    public string Content { get; set; }    //备用键    public string BlogUrl { get; set; }    public Blog Blog { get; set; }}

2.2数据注释

不能使用数据注释配置备用键。

2.3Fluent API

你可以使用熟知的API将单个属性配置为备用密钥。

class MyContext : DbContext{    public DbSet<Car> Cars { get; set; }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        modelBuilder.Entity<Car>()            //配置为备用密钥            .HasAlternateKey(c => c.LicensePlate);    }}class Car{    public int CarId { get; set; }    public string LicensePlate { get; set; }    public string Make { get; set; }    public string Model { get; set; }}你还可以使用熟知的API将多个属性配置为备用密钥(称为复合备用键)。class MyContext : DbContext{    public DbSet<Car> Cars { get; set; }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        modelBuilder.Entity<Car>()            //配置为备用密钥            .HasAlternateKey(c => new { c.State, c.LicensePlate });    }}class Car{    public int CarId { get; set; }    public string State { get; set; }    public string LicensePlate { get; set; }    public string Make { get; set; }    public string Model { get; set; }}

3.继承

EF模型中的继承用于控制如何在数据库中表示实体类中的继承。

3.1约定

按照约定,由数据库提供商确定如何在数据库中表示继承。有关如何使用关系数据库提供程序来处理此情况的详细说明。如果模型中显式包括两个或更多个继承类型,则EF仅会设置继承。EF不会扫描模型中未包含的基类型或派生类型。可以通过为继承层次结构中的每个类型公开DbSet,在模型中包含类型。

class MyContext : DbContext{    public DbSet<Blog> Blogs { get; set; }    public DbSet<RssBlog> RssBlogs { get; set; }}public class Blog{    public int BlogId { get; set; }    public string Url { get; set; }}public class RssBlog : Blog{    public string RssUrl { get; set; }}

如果不想公开层次结构中一个或多个实体的DbSet,可以使用熟知的API来确保它们包含在模型中。如果不依赖约定,则可以使用HasBaseType显式指定基类型。

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

4.支持字段

支持字段允许EF读取和写入字段,而不是属性。当使用类中的封装来限制或通过应用程序代码对数据访问进行限制时,这可能很有用,但在不使用这些限制的情况下,应从数据库中读取或写入值。

4.1约定

按照约定,将发现以下字段作为给定属性的支持字段(按优先级顺序列出)。仅为模型中包含的属性发现字段。

public class Blog{    private string _url;    public int BlogId { get; set; }    public string Url    {        get { return _url; }        set { _url = value; }    }}

配置了支持字段后,当从数据库具体化实体实例(而不是使用属性资源库)时,EF将直接写入该字段。如果EF需要在其他时间读取或写入值,则它将使用属性(如果可能)。例如,如果EF需要更新某个属性的值,则它将使用属性setter(如果已定义)。如果该属性为只读,则它将写入字段。

4.2数据注释

不能通过数据批注配置支持字段。

4.3Fluent API

你可以使用熟知的API来配置属性的支持字段。

class MyContext : DbContext{    public DbSet<Blog> Blogs { get; set; }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        modelBuilder.Entity<Blog>()            .Property(b => b.Url)            .HasField("_validatedUrl");    }}public class Blog{    private string _validatedUrl;    public int BlogId { get; set; }    public string Url    {        get { return _validatedUrl; }    }    public void SetUrl(string url)    {        using (var client = new HttpClient())        {            var response = client.GetAsync(url).Result;            response.EnsureSuccessStatusCode();        }        _validatedUrl = url;    }}
4.3.1控制何时使用字段

可以配置EF何时使用字段或属性。有关支持的选项,请参阅PropertyAcceSSMode枚举。

modelBuilder.Entity<Blog>()    .Property(b => b.Url)    .HasField("_validatedUrl")    .UsePropertyAccessMode(PropertyAccessMode.Field);
4.3.2没有属性的字段

你还可以在你的模型中创建一个概念属性,该属性在实体类中不具有相应的CLR属性,而是使用字段来存储实体中的数据。这不同于阴影属性,其中的数据存储在更改跟踪器中。如果实体类使用方法获取或设置值,通常会使用此方法。可以在Property(...) API中为EF指定字段的名称。如果没有具有给定名称的属性,则EF将查找字段。

class MyContext : DbContext{    public DbSet<Blog> Blogs { get; set; }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        modelBuilder.Entity<Blog>()            .Property("_validatedUrl");    }}public class Blog{    private string _validatedUrl;    public int BlogId { get; set; }    public string GetUrl()    {        return _validatedUrl;    }    public void SetUrl(string url)    {        using (var client = new HttpClient())        {            var response = client.GetAsync(url).Result;            response.EnsureSuccessStatusCode();        }        _validatedUrl = url;    }}

您还可以选择为属性指定名称,而不是字段名称。然后,在创建模型时使用此名称,最值得注意的是,该名称将用于在数据库中映射到的列名称。

protected override void OnModelCreating(ModelBuilder modelBuilder){    modelBuilder.Entity<Blog>()        .Property<string>("Url")        .HasField("_validatedUrl");}

如果实体类中没有属性,则可以在LINQ查询中使用EF.Property(...)方法来引用概念上是模型的一部分的属性。

var blogs = db.blogs.OrderBy(b => EF.Property<string>(b, "Url"));

到此,关于“ASP.NET Core使用EF创建模型的方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: ASP.NET Core使用EF创建模型的方法

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

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

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

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

下载Word文档
猜你喜欢
  • 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创建模型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP...
    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创建模型”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.NET Core中如何使用EF创建模型”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-29
  • 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创建模型(索引、备用键、继承、支持字段)
    目录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
  • 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创建模型(包含属性、排除属性、主键和生成值)
    目录1.什么是Fluent API?2.包含属性和排除属性2.1包含属性2.2排除属性2.2.1数据批注2.2.2Fluent API3.主键3.1数据批注3.2Fluent API...
    99+
    2024-04-02
  • ASP.NET Core如何使用EF为关系数据库建模
    本文小编为大家详细介绍“ASP.NET Core如何使用EF为关系数据库建模”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.NET Core如何使用EF为关系数据库建模”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-06-29
  • ASP.NET Core托管模型CreateDefaultBuilder()方法
    让我们讨论一下 CreateDefaultBuilder() 方法究竟对配置和设置 Web 服务器的作用。从托管的角度来看,一个ASP.NET Web 应用程序可以通过两种方式托管,...
    99+
    2024-04-02
  • ASP.NET Core MVC中的模型怎么使用
    本篇内容介绍了“ASP.NET Core MVC中的模型怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.模型绑...
    99+
    2023-06-30
  • 创建ASP.NET Core Web应用程序并介绍项目模板
    目录创建ASP.NET Web 应用程序运行ASP.NET Core Web 应用程序:ASP.NET Core应用程序模板空APIWeb应用程序模板Web应用程序(模型视图-控制器...
    99+
    2024-04-02
  • ASP.NET Core项目中调用WebService的方法
    一、前言 现实生产中,有一些比较老的系统对外提供的接口都是WebService形式的,如果是使用.NET Framework创建的项目调用WebService非常方便,网上有很多代码...
    99+
    2024-04-02
  • ASP.NET Core中的NPM模块:如何使用它们?
    ASP.NET Core是一种跨平台的Web框架,它可以在Windows、Linux和macOS等各种操作系统上运行。在ASP.NET Core中,使用NPM模块可以轻松地添加各种功能和插件。本文将介绍如何在ASP.NET Core项目中...
    99+
    2023-08-25
    npm 数组 api
  • 在NumPy中创建QR码:使用ASP.NET Core在Web应用程序中实现
    QR码是一种二维码,可以存储大量信息,包括URL、文本、联系人信息等。在现代数字化时代,QR码已经成为了一种非常重要的信息传递方式。在本文中,我们将介绍如何使用NumPy创建QR码,并将其集成到ASP.NET Core Web应用程序中。...
    99+
    2023-08-26
    numy 二维码 numpy
  • ASP.NET Core使用固定窗口限流的方法是什么
    这篇文章主要讲解了“ASP.NET Core使用固定窗口限流的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET Core使用固定窗口限流的方法是什么...
    99+
    2023-06-22
  • 机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价
    机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点...
    99+
    2023-08-31
    机器学习 python kmeans 算法
  • 解析ASP.NET Core中Options模式的使用及其源码
    目录1、Options模式的用法2、Options模式源码解析3、最佳实践本章将和大家分享ASP.NET Core中Options模式的使用及其源码解析。 在ASP.NET Core...
    99+
    2024-04-02
  • ASP.NET Core使用功能开关控制路由访问的方法
    今天小编给大家分享一下ASP.NET Core使用功能开关控制路由访问的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作