EF core配置数据库表

EF core配置数据库表

创建数据库,第一是类型,第二是精度,第三是约束,第四是关系。此外,还有字段名、索引。

字段属性配置API

字段约束、关系对应:

    EF Core 配置                    SQL 写法
    HasKey()                    -> PRIMARY KEY
    Property() + IsRequired()   -> NOT NULL
    Property() + HasMaxLength() -> VARCHAR长度
    HasCheckConstraint()        -> CHECK约束
    HasIndex()                  -> INDEX / UNIQUE INDEX
    HasOne() + WithMany()       -> EF对象关系
    HasForeignKey()             -> 数据库FOREIGN KEY
    OnDelete()                  -> 外键删除规则

字段类型对应关系:

long     -> BIGINT
string   -> VARCHAR / TEXT
decimal  -> DECIMAL
bool     -> TINYINT(1)
DateOnly -> DATE
DateTime -> DATETIME

导航属性(Navigation Property)

在 Entity Framework (EF) 中,导航属性用于在两个实体类型之间导航关联。导航在外键之上分层,以提供用于操作和读取关系的面向对象的自然视图。

一对多关系示例

builder.HasOne(x => x.AssignedOperator)
.WithMany(u => u.AssignedWorkOrders)
.HasForeignKey(x => x.AssignedTo)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("FK_work_order_app_user_assigned_to");

==》
解释:

x为WorkOrders,u为AppUser。
x里存了导航属性AssignedOperator,记录工单分配对象的信息;
u里存了AssignedWorkOrders,记录用户对应的一系列工单信息;
x里的AssignedTo数据库字段是用于关系连接的外键字段。
DeleteBehavior.Restrict:外键关联的用户表数据行删除了,但工单不删除。
外键约束名为"FK_work_order_app_user_assigned_to"。

==》
自动生成的sql语句:

ALTER TABLE work_order
ADD CONSTRAINT FK_work_order_app_user_assigned_to
FOREIGN KEY (assigned_to)
REFERENCES app_user(id)
ON DELETE RESTRICT;

配置原则

  • 一条关系 -> 选择一个配置类 -> 完整配置一次。通常把关系配置放在“保存外键的实体”对应配置类中。这里外键 AssignedTo 保存在 WorkOrder,所以放在 WorkOrderConfig 很合适。

  •   .NET 常见类型 -> 通常交给 Provider 自动映射
      字符串长度/小数精度 -> 明确配置
      属性名与字段名相同 -> 不写 HasColumnName()
      属性名 PascalCase、字段名 snake_case -> 写 HasColumnName()
      特殊数据库类型 -> 写 HasColumnType()
    
  • 备注,导航属性、关系配置会自动生成外键,太麻烦了根本不用,需要了解怎样关闭外键生成功能,或者我手动删除外键?

参考链接

posted @ 2026-11-02 18:58  头有点晕  阅读(3)  评论(0)    收藏  举报