EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用

简介: EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用

EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用


前言

微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上。开发人员使用Linq语言,对数据库操作如同操作Object对象

一样省事。EF有三种使用场景,1. 从数据库生成Class,2.由实体类生成数据库表结构,3.通过数据库可视化设计器设计数据库,同时生成实体类。

ORM (对象关系型映射)是将数据存储从域对象自动映射到关系型数据库的工具。ORM主要包括3个部分:域对象、关系数据库对象、映射关系。ORM使类提供自动化CRUD,使

开发人员从数据库API和SQL中解放出来。以前是使用ADO.NET来进行对数据库中得数据表进行操作,现在,使用ORM直接对对象进行操作,操作对象就等于操作数据库表,

那怎么让对象和数据库表一一对应起来?这个过程就是通过ORM框架来完成的,操作对象就是操作数据库也是通过ORM来完成的。ORM框架就是做对象和数据库的映射的。

那么EntityFramework的作用是什么?

我的理解就是大大简化数据库操作的,举个例子:在没有使用EF前,我们要编写复杂的SQL语句,而使用了EF之后,将会减少编写复杂的SQL语句过程。

开发环境

系统环境:win7及以上,本示例环境win11

开发工具:Visual Studio 2017及以上

创建项目:

       控制台请创建【控制台应用(.NET Framework)】

       Web请创建【ASP.NET Web应用程序(.NET Framework)】

数据库:SQLServer数据库2012及以上版本·如果下载最新版本,使用免费版本即可。

       本地数据库链接:【.】或【127.0.0.1】

       登陆方式1:【本地登陆】

       登陆方式2:账号【sa】 pwd【admin】

       测试数据库名称:【mytest】

       排序规则:【Chinese_PRC_CI_AS】


C#拓展方法

扩展方法是允许使用实例方法的调用语法来调用静态方法的语言功能。

  • 扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。

扩展方法的定义与调用:

  • 定义包含扩展方法的静态类,此类必须对客户端代码可见。
  • 将扩展方法实现为静态方法,并且使其可访问性与所在类的可访问性一致。
  • 扩展方法的第一个参数是指定方法所操作的类型、此参数前面必须加上this修饰符。
  • 在调用代码中,添加using指令,用于指定包含扩展方法类的命名空间。
  • 扩展方法的调用与调用类型的实例方法一样。

拓展方法示例

我们使用【控制台】项目来搞这个测试。

这里要重写一下StringExtension类,并添加我们想要的拓展方法。

重写代码

public static class StringExtension
{
    public static int WordCount(this string str)
    {
        // 通过char进行拆分,英文单词一般都通过这些符号切割。
        char[] arr = new char[] { ' ', '.', '?', ',' };
        return str.Split(arr, StringSplitOptions.RemoveEmptyEntries).Count();
    }
}

应用代码

static void Main(string[] args)
{
    // 扩展一个用于单词计数的方法
    string str = "I HAVA A DREAM!";
    int count = str.WordCount();
    Console.WriteLine("分割后单词个数是{0}个。", count);
}

输出效果:

yield关键字

yield关键字向编译器指示该关键字所在的方法是迭代器块,编译器将生成一个类来实现迭代器块中所表示的行为。

在迭代器块中,yield关键字与return关键字结合使用,向枚举器对象提供值,该值为返回值。

yield关键字示例

这里用一个列表的方式进行数据的遍历以及判断。这里单独创建了一个【Goods】类:

public class Goods
{
    public string GoodsName { get; set; }
    public double GoodsPrice { get; set; }
}

示例使用代码:

static void Main(string[] args)
{
    List<Goods> userInfoList = new List<Goods>()    {
        new Goods() {  GoodsName="薯片", GoodsPrice=5.9},
        new Goods() {  GoodsName="红肠", GoodsPrice=9.9},
    };
    var obj = getList(userInfoList, 9.9);
    foreach (var item in obj)
    {
        Console.WriteLine("商品名称:{0},商品价格{1}", item.GoodsName, item.GoodsPrice);
    }
}
public static IEnumerable<Goods> getList(List<Goods> list, double price)
{
    foreach (var item in list)
    {
        if (item.GoodsPrice == price)
        {
            yield return item;
        }
    }
}

输出效果:

这个只是个基础示例,我们一般还是要通过Web项目来表述的。

相关文章
|
4月前
|
测试技术 API C#
C#使用Bogus生成测试数据
C#使用Bogus生成测试数据
57 1
|
2月前
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
58 8
|
2月前
|
SQL 缓存 分布式计算
C#如何处理上亿级数据的查询效率
C#如何处理上亿级数据的查询效率
34 1
|
3月前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
49 8
|
2月前
|
中间件 数据库连接 API
C#数据分表核心代码
C#数据分表核心代码
42 0
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
492 0
|
4月前
|
存储 C# 数据库
解决C#对Firebase数据序列化失败的难题
在游戏开发中,Unity结合Firebase实时数据库为开发者提供强大支持,但在C#中进行数据序列化和反序列化时常遇难题。文章剖析了数据丢失或反序列化失败的原因,并给出解决方案,包括使用`JsonUtility`、确保字段标记为`[Serializable]`以及正确配置网络请求。示例代码演示了如何在Unity环境中实现Firebase数据的序列化和反序列化,并通过设置代理IP、Cookies和User-Agent来增强网络请求的安全性。这些技巧有助于确保数据完整传输,提升开发效率。
解决C#对Firebase数据序列化失败的难题
|
4月前
|
C# 索引
C#中的virtual和override关键字
C#中的virtual和override关键字
48 3
|
4月前
|
数据采集 XML C#
C#简化工作之实现网页爬虫获取数据
C#简化工作之实现网页爬虫获取数据
70 1
|
4月前
|
开发框架 .NET C#
【Azure Developer】C# / .NET 静态函数中this关键字的作用
【Azure Developer】C# / .NET 静态函数中this关键字的作用