zoukankan      html  css  js  c++  java
  • EntityFrameworkCore 中实体的几种配置方法

    使用数据注解

    实体类通常是在Models目录下,直接在实体类上添加属性注解,比如[Required]/[Key]等.

    using System.ComponentModel.DataAnnotations;
    
    public class User()
    {
        [Key]
        public string UserId { get; set; }
    
        [Required]
        public string UserName { get; set; }
    }
    

    重写配置方法

    在自己实现的XxxDbContext数据库上下文类中重写配置方法,用Fluent API的方式添加所有实体的配置.

    using Microsoft.EntityFrameworkCore;
    
    public partial class XxxDbContext : DbContext
    {
        public XxxDbContext()
        {
        }
    
        public HaoyikuDbContext(DbContextOptions<HaoyikuDbContext> options)
            : base(options)
        {
        }
    
        public DbSet<User> Users { get; set; }
    
        // 重写以下方法
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            // 添加实体的配置
            modelBuilder.Entity<BizOrderPush>().HasKey();
        }
    }
    

    实现实体类配置接口

    • 新建ModelConfigurations目录,在该目录下新增每一个实体对应的配置类.
    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Metadata.Builders;
    
    /// <summary>
    /// 用户实体-模型配置
    /// </summary>
    public class UserConfiguration : IEntityTypeConfiguration<User>
    {
        public void Configure(EntityTypeBuilder<User> builder)
        {
            builder.HasKey(o => o.UserId);
            builder.Property(o => o.UserName).IsRequired();
        }
    }
    

    单独配置每一个实体类后,通过以下方法设置

    using Microsoft.EntityFrameworkCore;
    
    public partial class XxxDbContext : DbContext
    {
        public XxxDbContext()
        {
        }
    
        public HaoyikuDbContext(DbContextOptions<HaoyikuDbContext> options)
            : base(options)
        {
        }
    
        public DbSet<User> Users { get; set; }
    
        // 重写以下方法
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            // 添加实体的配置
            modelBuilder.ApplyConfiguration(new UserConfiguration());
            base.OnModelCreating(modelBuilder);
        }
    }
    

    以上几种方式可以共存,至于到底用哪种,推荐用哪种,各位看着办吧.

    参考

  • 相关阅读:
    TCP IP基础知识的复习
    Design Pattern: Singleton 模式
    解决Win7下安装VS2010不显示序列号框的两种方法
    字典树(Trie tree)
    在VS如何查看汇编代码
    使用模板实现编译期间多态
    一段c++代码小例子
    C++ 虚函数表解析
    C++问题:if( input.rdstate() & std::ios::failbit )
    Design Pattern: Adapter 模式 Class Adapter
  • 原文地址:https://www.cnblogs.com/taadis/p/12125835.html
Copyright © 2011-2022 走看看