由于FluentAPI编写起来比较麻烦,实际开发中很少手写。
应用配置的顺序是不确定的,因此仅当顺序不重要时才应使用此方法。
在向提供程序传递数据之前,实体框架不会执行任何最大长度的验证。 而是由提供程序或数据存储根据情况进行验证。 例如,当面向 SQL Server 时,超过最大长度将导致异常,因为基础列的数据类型不允许存储多余的数据。在下面的示例中,将最大长度配置为 500 将导致在 SQL Server 上创建 nvarchar(500) 类型的列:
属性 [PrimaryKey] 是在 EF Core 7.0 中引入的。 在旧版本中使用 Fluent API。
也可以显示配置值:复制代码
- modelBuilder.Entity<Blog>()
- .Property(b => b.BlogId).ValueGeneratedNever(); // 取消自动增长
与默认值或计算列不同,我们没有指定值的生成方式;这取决于所使用的数据库提供程序。 数据库提供程序可能会自动为某些属性类型设置值生成,但其他属性类型可能需要你手动设置值的生成方式。
例如,在 SQL Server 上,如果 GUID 属性配置为在添加时生成值,提供程序会自动在客户端执行值生成,并使用算法生成最佳顺序 GUID 值。 但是,在 DateTime 属性上指定 ValueGeneratedOnAdd 将不起作用,
一个常见的请求是让数据库列包含第一次插入列的日期/时间(添加时生成的值)或上次更新列的日期/时间(添加或更新时生成的值)。 由于可通过各种策略执行此操作,因此 EF Core 提供程序通常不会为日期/时间列自动设置值生成 - 你必须自行配置。
同样,配置为在添加或更新时生成值并标记为并发标记的 byte[] 属性将设置为 rowversion 数据类型,以便在数据库中自动生成值。 但是,指定 ValueGeneratedOnAdd 不起作用。
如果属性是主键或属性的类型与主体键不兼容,则不会将其配置为外键。无外键属性
mysql中的覆盖索引:如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是联合索引的字段或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据5. 数据种子
迁移仅在确定应执行哪些操作以使种子数据达到所需状态时考虑模型更改。 因此,对迁移之外执行的任何数据更改都可能会丢失或导致错误。例如,这将在 OnModelCreating 中为 Blog 配置种子数据:
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |