update

2881099
2022-05-31 15:48:10 +08:00
parent 988a179927
commit f07989fcbf

@@ -1,6 +1,39 @@
v1.4.0+ 已自动识别 EFCore 实体特性 Key/Required/NotMapped/MaxLength/StringLength/DatabaseGenerated/Table/Column
## 名称
FreeSql 默认使用实体的类名,或属性名与数据库映射,也可以指定映射的名称;
指定实体的表名,指定 Name 后实体类名变化不影响数据库对应的表。FreeSql尽量支持了对多数据库或schema支持不防试试指定表名为其他数据库.表名,不同数据库的指定方式有差异,这一点以后深入解答。
```csharp
[Table(Name = "db2.tb_topic111")]
class Topic {
//...
}
```
> 注意:尽量不要使用带点的表名,只有 MySql/Sqlite 对此类表名支持 CodeFirst。但是它不影响 CRUD 功能,使用 [Table(Name = "\`sys.config\`")] 解决
> 指定表名的几种方法,优先级从小到大:
- 1、实体类名
- 2、Aop fsql.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = "public.tabname"
- 3、FluentApi fsql.CodeFirst.ConfigEntity(a => a.Name("public.tabname"))
- 4、[Table(Name = "public.tabname")]
- 5、AsTable fsql.Select<T>().AsTable((_, old) => "public.tabname").ToList()
指定实体的表名修改为实体类名。指定数据库旧的表名修改实体命名时同时设置此参数为修改之前的值CodeFirst才可以正确修改数据库表否则将视为【创建新表】。
```csharp
[Table(OldName = "Topic")]
class Topic2 {
//...
}
```
> 实体的属性也有相同的功能,[Column(Name = "xxx")]
## 主键(Primary Key)
```csharp
@@ -247,31 +280,6 @@ public string geo { get; set; }
//WHERE (a.[id] = 'c7227d5e-0bcf-4b71-8f0f-d69a552fe84e')
```
## 名称
FreeSql 默认使用实体的类名,或属性名与数据库映射,也可以指定映射的名称;
指定实体的表名,指定 Name 后实体类名变化不影响数据库对应的表。FreeSql尽量支持了对多数据库或schema支持不防试试指定表名为其他数据库.表名,不同数据库的指定方式有差异,这一点以后深入解答。
```csharp
[Table(Name = "db2.tb_topic111")]
class Topic {
//...
}
```
> 注意:尽量不要使用带点的表名,只有 MySql/Sqlite 对此类表名支持 CodeFirst。但是它不影响 CRUD 功能,使用 [Table(Name = "\`sys.config\`")] 解决
指定实体的表名修改为实体类名。指定数据库旧的表名修改实体命名时同时设置此参数为修改之前的值CodeFirst才可以正确修改数据库表否则将视为【创建新表】。
```csharp
[Table(OldName = "Topic")]
class Topic2 {
//...
}
```
> 实体的属性也有相同的功能,[Column(Name = "xxx")]
## 禁用迁移
IFreeSql.CodeFirst.IsAutoSyncStructure 可设置全局【自动迁移结构】功能,也可通过 FreeSqlBuilder.UseAutoSyncStructure(true) 创建 IFreeSql 的时候设置功能。