返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >EntityFramework使用DbModelBuilderAPI创建表结构
  • 721
分享到

EntityFramework使用DbModelBuilderAPI创建表结构

2024-04-02 19:04:59 721人浏览 独家记忆
摘要

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

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创建表结构的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: EntityFramework使用DbModelBuilderAPI创建表结构

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

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

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作