EFCore 实体类配置

在EFCore 中配置实体类,方法基本与EF是相同的.

两种配置方法

使用特性标注

/// <summary>
/// 用户表
/// </summary>
[Table("T_User")]    /// 
public class UserEntity:BaseEntity
{
    [Required]
    public string UserName { get; set; }
    [Required]
    public string PassWord { get; set; }
}

使用API

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<UserEntity>().ToTable("T_User");  
        modelBuilder.Entity<UserEntity>().Property(x => x.UserName ).IsRequired();
        modelBuilder.Entity<UserEntity>().Property(x => x.PassWord ).IsRequired();
}

有一点要注意,EFCore中的ToTableMicrosoft.EntityFrameworkCore.Relational 下的扩展方法 。需要导入该库

具体的各种配置建议去官网查,我就算写在这里也没有官网详细 😂链接: Core.

下面就是EFCore与EF的不同之处了。

实体类的配置都写在DbContext的方法OnModelCreating会显得太多,改起来也麻烦。
我们可以用单独的配置类来管理配置。这种形式在EF中也是经常用到。

单独配置

EF

class UserConfig : EntityTypeConfiguration<UserEntity>
{
    public UserConfig()
    {
        ToTable("T_User");
        Property(x => x.UserName).IsRequired();
        Property(x => x.PassWord).IsRequired();
    }

}

//然后再OnModelCreating中导入

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
      modelBuilder.Configurations.Add(new UserConfig());    
}

但是EFCore在这一块有所不同:

EFCore

public class UserConfig : IEntityTypeConfiguration<UserEntity>
{
    public void Configure(EntityTypeBuilder<UserEntity> builder)
    {
        builder.ToTable("T_User");
        builder.Property(x => x.UserName).IsRequired();
        builder.Property(x => x.PassWord).IsRequired();
    }
}

 protected override void OnModelCreating(ModelBuilder modelBuilder)
 {
     modelBuilder.ApplyConfiguration(new UserConfig());
 }

虽然有区别但是大同小异。

### 如何在 EF Core 中生成或修改实体类 #### 使用 Scaffold-DbContext 命令生成模型类 为了简化数据库到代码的映射过程,在 Entity Framework (EF) Core 中可以利用 `Scaffold-DbContext` 命令来创建基于现有数据库结构的上下文和实体类。这允许开发者快速启动并运行应用程序而无需手动编写大量的数据访问层代码[^1]。 ```powershell Scaffold-DbContext "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models ``` 上述命令会连接指定的 SQL Server 数据库,并自动生成相应的 C# 类文件存放在项目的 Models 文件夹下。这些类代表了数据库中的表以及它们之间的关系。 对于已经存在的项目,如果想要更新现有的实体类以反映最新的数据库变更,则可以通过重新执行此命令覆盖旧版本或者仅针对特定部分进行增量式的调整[^3]。 #### 手动定义实体类及其配置 除了通过工具自动化生成外,也可以完全由开发人员自行设计实体对象。这种方式提供了更大的灵活性,尤其是在处理复杂业务逻辑时尤为有用。当采用这种方法时,建议遵循一定的命名约定以便于维护: - 实体名称通常应为单数形式; - 属性名应当清晰表达其含义; - 关联属性需指明导航路径; 下面是一个简单的例子展示了如何声明一个名为 Student 的实体类: ```csharp using System; using System.ComponentModel.DataAnnotations; public class Student { public int ID { get; set; } [Required] [StringLength(50)] public string LastName { get; set; } [Required] [StringLength(50)] public string FirstMidName { get; set; } [DataType(DataType.Date)] public DateTime EnrollmentDate { get; set; } } ``` 此外,还可以借助 Fluent API 或者 Data Annotations 来进一步定制化实体的行为模式与约束条件[^2]。 #### 添加必要的依赖项 无论选择哪种方式构建实体类之前都需要确保安装好正确的 NuGet 包支持。具体来说就是向当前解决方案引入适用于 .NET 平台版本的目标框架下的最新稳定版 EntityFrameworkCore SDK 及相关提供程序组件[^4]。 ```xml <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <!-- Add provider packages here --> </ItemGroup> ``` 以上 XML 片段展示了一个典型的 .csproj 文件片段用于描述所需加载的外部库列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值