文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Entity Framework中怎么使用DbModelBuilder API创建表结构

2023-06-29 08:51

关注

这篇文章主要讲解了“Entity Framework中怎么使用DbModelBuilder API创建表结构”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Entity Framework中怎么使用DbModelBuilder API创建表结构”吧!

DbContext类有一个OnModelCreating方法,它用于流利地配置领域类到数据库模式的映射。下面我们以fluent API的方式来定义映射。
首先,先将Product类注释掉,重新编写该类,重新编写后的Product类:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFFluentAPI.Model{    public class Product    {        public int ProductNo { get; set; }        public string ProductName { get; set; }        public double ProductPrice { get; set; }    }}

然后在数据库上下文Context类中的OnModelCreating方法中使用fluent API来定义Product表的数据库模式:

using EFFluentAPI.Model;using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFFluentAPI.EFContext{    public class Context:DbContext    {        public Context()            : base("DbConnection")        { }        public DbSet<Product> Products { get; set; }        /// <summary>        /// 重新OnModelCreating方法        /// </summary>        /// <param name="modelBuilder"></param>        protected override void OnModelCreating(DbModelBuilder modelBuilder)        {            //映射到表Product,ProductNo和ProductName作为复合主键            modelBuilder.Entity<Product>().ToTable("Product").HasKey(p=>new {p.ProductNo,p.ProductName});            //ProductNo映射到数据表中的列名是Id            modelBuilder.Entity<Product>().Property(p => p.ProductNo).HasColumnName("Id");            modelBuilder.Entity<Product>().Property(p => p.ProductName)                .IsRequired() //设置ProductName是必须的,即不能为null,默认是可以为null的                .IsUnicode()  //设置ProductName列为Unicode字符,实际上默认就是Unicode字符,所以该方法可以不写。                .HasMaxLength(10); //设置ProductName列的最大长度是10            base.OnModelCreating(modelBuilder);        }    }}

modelBuilder.Entity<Product>()会得到EntityTypeConfiguration类的一个实例。此外,使用fluent API的一个重要决定因素是我们是否使用了外部的POCO类,即实体模型类是否来自一个类库。我们无法修改类库中类的定义,所以不能通过数据注解来提供映射细节。这种情况下,我们必须使用fluent API。

什么是POCO?

POCO是指Plain Old Class Object,也就是最基本的CLR Class,在原先的EF中,实体类通常是从一个基类继承下来的,而且带有大量的属性描述。而POCO则是指最原始的Class,换句话说这个实体的Class仅仅需要从Object继承即可,不需要从某一个特定的基类继承。主要是配合Code First使用。Code First则是指我们先定义POCO这样的实体Class,然后生成数据库。实际上现在也可以使用Entity Framweork Power tools将已经存在的数据库反向生成POCO的Class(不通过edmx文件)。

程序运行后创建的数据库如下图所示:

Entity Framework中怎么使用DbModelBuilder API创建表结构

感谢各位的阅读,以上就是“Entity Framework中怎么使用DbModelBuilder API创建表结构”的内容了,经过本文的学习后,相信大家对Entity Framework中怎么使用DbModelBuilder API创建表结构这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯