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() -
备注,导航属性、关系配置会自动生成外键,太麻烦了根本不用,需要了解怎样关闭外键生成功能,或者我手动删除外键?

浙公网安备 33010602011771号