博客
关于我
EF三种编程方式详细图文教程(C#+EF)之Database First
阅读量:787 次
发布时间:2023-01-24

本文共 1783 字,大约阅读时间需要 5 分钟。

Entity Framework编程方式:从数据库到代码的摇篮之旅

作为一名开发人员,我最近开始学习 Entity Framework(EF),这是一款强大的ORM(对象关系映射)工具,能够帮助我们更高效地与数据库进行交互。EF从4.1版本开始支持“Code First”编程模式,这与传统的“Database First”和“Model First”模式有很大不同。为了更好地理解这些编程模式,我决定逐一探索它们的特点和使用场景。

了解操作环境:

首先,我选择了使用 Visual Studio 2013 和 SQL Server 2012 这一开发环境,毕竟这是一个经过验证的组合。如果你没有现成的数据库,可以使用 localdb 这个工具,它会在你的开发环境中自动创建一个本地数据库。这样做的好处是简化了数据库连接的过程。

Database First模式:

“Database First”模式意味着数据库已经存在,我们可以根据现有的数据库结构生成相应的数据类和上下文对象。这个模式非常适合已经存在数据库的项目,或者你在迁移现有数据库的时候使用。

让我来说明一下如何在 Visual Studio 中创建一个 Database First 项目:

  • 打开 Visual Studio,创建一个新的 Console 应用程序。
  • 右键单击项目,选择“新建” -> “ADO.NET 模型”。
  • 在模型编辑器中,点击“项目模板”中的“数据库模型”,选择“从数据库生成”,然后输入一个合适的命名,如 EFDemoDB
  • 在模型编辑器中,你会看到数据库连接选项卡,点击“新建”按钮,输入数据库的名称和访问信息。
  • 接下来,选择要包含在模型中的表和它们的字段。模型编辑器会根据你选择的表自动生成相应的实体类和上下文对象。
  • 我的个人经验是,这一步是非常直接的,但有时如果数据库结构较为复杂,可能需要调整模型,以确保字段和表的映射正确。

    Code First模式:

    相比之下,“Code First”模式则完全反过来。它假定你是首先编写代码,然后生成数据库表。这种模式特别有用,尤其是在快速原型设计或者你对数据库结构不太确信的时候。

    举个简单的例子,假设我想创建一个学生信息管理系统。我可以在代码中定义一个 Student 实体类,包含 Name、ID 和 EnrollDate 这些字段。EF 会在代码运行时生成相应的数据库表,表结构会与你的实体类结构一致。

    public class Student{    public int ID { get; set; }    public string Name { get; set; }    public DateTime EnrollDate { get; set; }}

    这看起来非常简单,但需要注意,某些字段可能需要配置为 nullable 或者其他特性,以确保生成的表结构符合我们的需求。

    Model First模式:

    “Model First”模式又称为“设计时刻Aware”模型。这个模式允许你先在 Visual Studio 中创建和定制数据模型,然后再根据数据模型生成数据库表和实体类。这对于团队协作开发非常有用,因为所有成员都可以在同一个模型文件内修改数据结构,而不必担心生成后的数据库结构会因为单独的修改而发生冲突。

    操作步骤大致如下:

  • 创建一个新项目,选择“模型 Flint 檢查”。
  • 在模型编辑器中,你可以通过拖放表和字段,或者手动编辑 EDMX 文件,来定义数据模型。
  • 当你完成数据模型设计后,你可以右键单击模型,选择“从设计器生成数据库”。
  • Visual Studio 会根据你的模型创建相应的数据库表和存储过程。
  • 这个模式的关键在于“设计时刻”,也就是在代码生成之前就完成数据结构的设计和验证。

    总结:

    短短的学习经历让我对三种 Entity Framework 的编程模式有了更深入的理解。每一种模式有其适用的场景,无论是已经有数据库的项目,还是需要灵活控制数据库结构的设计,亦或者是需要快速原型开发的需求,都能找到一个最适合的模式。

    通过今天的学习,我不仅掌握了基本的操作流程,还学会了如何在实际项目中灵活运用 EF。希望未来能在实践中不断积累经验,不断提升在 ORM 工具方面的核心竞争力。

    转载地址:http://nheyk.baihongyu.com/

    你可能感兴趣的文章
    Golang起步篇(Windows、Linux、mac三种系统安装配置go环境以及IDE推荐以及入门语法详细释义)
    查看>>
    Hyper-V系列:微软官方文章
    查看>>
    Java系列:【注释模板】IDEA中JAVA类、方法注释模板教程
    查看>>
    JS系列(仅供参考):【浏览器编程】浏览器F12调试工具面板详解和JavaScript添加断点
    查看>>
    Kali 更换源(超详细,附国内优质镜像源地址)
    查看>>
    kali安装docker(亲测有效)
    查看>>
    Linux系列:Linux目录分析:[/] + [/usr] + [/usr/local] + [/usr/local/app-name]、Linux最全环境配置 + 动态库/静态库配置
    查看>>
    Linux系列:ubuntu各版本之间的区别以及Ubuntu、kubuntu、xUbuntu、lubuntu等版本区别及界面样式
    查看>>
    mysql系列:远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
    查看>>
    Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案
    查看>>
    Nmap渗透测试指南之探索网络
    查看>>
    Nmap渗透测试指南之防火墙/IDS逃逸、信息搜集
    查看>>
    Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务、snmp服务
    查看>>
    PHP系列:PHP 基础编程 2(时间函数、数组---实现登录&注册&修改)
    查看>>
    PHP系列:使用PHP实现登录注册功能的完整指南
    查看>>
    Python&aconda系列:cmd/powershell/anaconda prompt提示“系统找不到指定的路径”(亲测有效)
    查看>>
    Python&aconda系列:conda踩坑记录2.UnsatisfiableError: The following specifications were found to be incompa
    查看>>
    Python&aconda系列:Jupyter Notebook快速上手、深度学习库PyTorch安装
    查看>>
    Python&aconda系列:(W&L)Conda使用faiss-gpu报错及解决办法、安装numpy的坑、cmd执行Python脚本找不到第三方库、安装tensorflow-gpu时遇到的from
    查看>>
    python&anconda 系列:Pycharm在debug问题的N种解决方案(一般程序、web方向、人工智能方向)
    查看>>