ASP.NET Core使用EF创建模型(必需和可选属性、最大长度、并发标记、阴影属性)

2022-04-18 15:15:21
目录
1.必需和可选属性1.1约定1.2数据批注1.3Fluent API2.最大长度2.1约定2.2数据批注2.3Fluent API3.并发标记3.1约定3.2数据注释3.3Fluent API4.时间戳/行版本4.1约定4.2数据注释4.3Fluent API5.阴影属性5.1约定5.2数据注释5.3Fluent API

1.必需和可选属性

如果实体属性可以包含null,则将其视为可选。如果属性的有效值不可以包含null,则将其视为必需属性。映射到关系数据库架构时,必需的属性将创建为不可为null的列,而可选属性则创建为可以为null的列。

1.1约定

按照约定,.NET 类型可以包含null的属性将配置为可选,而.NET类型不包含null的属性将根据需要进行配置。例如,具有.net值类型(int、decimal、bool等)的所有属性都是必需的,而具有可为null的.net值类型(int?、decimal?、bool?等)的所有属性都是配置为可选。

1.2数据批注

可以按如下所示将"约定"可以为"可选"的属性配置为"必需":

namespace EFModeling.DataAnnotations.Required{    class MyContext : DbContext    {        public DbSet<Blog> Blogs { get; set; }    }    public class Blog    {        public int BlogId { get; set; }        //加上这个批注,这个值就必需写入        [Required]        public string Url { get; set; }    }}

1.3Fluent API

namespace EFModeling.FluentAPI.Required{    class MyContext : DbContext    {        public DbSet<Blog> Blogs { get; set; }        protected override void OnModelCreating(ModelBuilder modelBuilder)        {            modelBuilder.Entity<Blog>()                .Property(b => b.Url)                //这个方法表示必需写入                .IsRequired();        }    }    public class Blog    {        public int BlogId { get; set; }        public string Url { get; set; }    }}

2.最大长度

配置最大长度可为数据存储提供有关要对给定属性使用的相应数据类型的提示。最大长度仅适用于数组数据类型,如string和byte[]。例如前端传统数据长度远大于限定的长度,则提示。

2.1约定

按照约定,应由数据库提供程序为属性选择适当的数据类型,即数据库字段设置长度多少,生产程序实体接受值时就限定长度多少。对于具有长度的属性,数据库提供程序通常将选择允许最长数据长度的数据类型。例如,Microsoft SQL Server将对字符string属性使用 nvarchar(max)(如果该列用作键,则会使用nvarchar(450))。

2.2数据批注

你可以使用数据批注为属性配置最大长度。此示例面向SQL Server,因此使用数据类型 nvarchar(500)。

namespace EFModeling.DataAnnotations.MaxLength{    class MyContext : DbContext    {        public DbSet<Blog> Blogs { get; set; }    }    public class 家的学习有所帮助,也希望大家多多支持我们。