public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<OrderItem> OrderItems { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// 自定义必须包括 base.OnModelCreating(builder)
builder.ApplyConfiguration(new ApplicationUserConfig());
builder.ApplyConfiguration(new OrderItemConfig());
// 添加更多自定义设置
}
}public class ApplicationUserConfig : IEntityTypeConfiguration<ApplicationUser>
{
public void Configure(EntityTypeBuilder<ApplicationUser> builder)
{
// 设置该nvarchar类型,最大为15个字符
builder.Property(u => u.PhoneNumber).HasMaxLength(15);
// 设置实体AspNetUsers的表名为Users
builder.ToTable("Users");
}
}public class OrderItemConfig : IEntityTypeConfiguration<OrderItem>
{
public void Configure(EntityTypeBuilder<OrderItem> builder)
{
// 设置该列类型为datetime
builder.Property(o => o.DateTimeOrdered).HasColumnType("datetime");
// 设置属性Quantity默认值为1
builder.Property(o => o.Quantity).HasDefaultValue(1);
// 设置属性UniqueKey为主键
builder.HasKey(o => o.UniqueKey);
}
}注意在以上例子中,项目可以通过继承IEntityTypeConfiguration该类型,设置表的映射
本文详细介绍了如何在Entity Framework Core 2.0中进行数据库表的自定义映射,包括配置实体属性与数据库字段的对应关系,以及自定义复杂类型和关系映射的方法,帮助开发者更好地理解和使用EF Core进行数据操作。

347

被折叠的 条评论
为什么被折叠?



