博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EFcore笔记之创建模型
阅读量:4595 次
发布时间:2019-06-09

本文共 3291 字,大约阅读时间需要 10 分钟。

排除属性:NotMapped

NotMapped:排除属性在CodeFirst的时候在数据库里不创建该属性

 
public class Blog{    public int BlogId { get; set; }    public string Url { get; set; }    [NotMapped]    public DateTime LoadedFromDatabase { get; set; }}

  

主键设置,最大长度

按照约定,属性名为 Id 或 者包含“Id"("CarId")的会配置为实体的键。

例如

public int CarId{ get; set; }

可以使用“ [Key]”将单个属性配置为实体的键。

class Car{    [Key]    public string LicensePlate { get; set; }    [MaxLength(500)] //最大长度    public string Make { get; set; }    public string Model { get; set; }}

 值生成模式 丶必须属性 数据注释方式

  • 无值生成:必须在add数据的时候该项必须赋值(需始终提供要保存到数据库的有效值。 必须先将有效的值赋予新的实体,再将这些新的实体添加到上下文中)。
  • 在添加时生成值:在添加时生成值,有客户端生产值,或者由数据库生成。
  • 在添加或更新时生成值:在添加或更新时生成值,意味着在每次保存该记录(插入或更新)时生成新值。
    public class Blog{    [DatabaseGenerated(DatabaseGeneratedOption.None)] //无值生成    public int BlogId { get; set; }     [Required]//必须    public string Url { get; set; }     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //在添加时生成值     public DateTime Inserted { get; set; }     [DatabaseGenerated(DatabaseGeneratedOption.Computed)] //在添加或更新时生成值    public DateTime LastUpdated { get; set; }}

     

    并发标记 丶隐藏属性

  • 属性配置为并发标记用于实现乐观并发控制。https://docs.microsoft.com/zh-cn/ef/core/saving/concurrency 暂时未用到具体如何实现并发控制
  • public class Person{    public int PersonId { get; set; }    [ConcurrencyCheck]    public string LastName { get; set; }    public string FirstName { get; set; }}

          隐藏属性又叫阴影属性,这个属性的作用就是在数据库表里面 LastUpdateTime的值为null的时候,不应在映射的实体类型公开数据库中没有数据时,卷影属性非常有用。这时微软的解释,如何配置数据注释并没有标明如何注释 可以使用Fluent API配置

class MyContext : DbContext{    public DbSet
Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity
() .Property
("LastUpdated"); }}public class Blog{ public int BlogId { get; set; } public string Url { get; set; }}

 关系:https://docs.microsoft.com/zh-cn/ef/core/modeling/relationships

   索引

     利用FluentApI创建索引 

class MyContext : DbContext{    public DbSet
People { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity
() .HasIndex(p => new { p.FirstName, p.LastName }); //多个列指定一个索引。 //modelBuilder.Entity
() .HasIndex(b => b.Url); //单个属性指定索引 //modelBuilder.Entity
() .HasIndex(b => b.Url) .IsUnique(); //此外可以指定索引应是唯一的这意味着任何两个实体可以具有给定属性的相同值。
}}public class Person{    public int PersonId { get; set; }    public string FirstName { get; set; }    public string LastName { get; set; }}

 

备用键

     官方文档解释:备用键与主键相对,用作每个实体实例的备用唯一标识符。 备用键可用作关系的目标。 使用关系数据库时,这将映射到备用键列上的唯一索引/约束和引用列的一个或多个外键约束的概念。

 

利用FluentApi进行配置

class MyContext : DbContext{    public DbSet
Cars { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity
() .HasAlternateKey(c => c.LicensePlate); //modelBuilder.Entity
() .HasAlternateKey(c => new { c.State, c.LicensePlate });//可用于配置要作为备用键 (称为复合的备用键) 的多个属性。 }}class Car{ public int CarId { get; set; } public string LicensePlate { get; set; } public string Make { get; set; } public string Model { get; set; }}

 

 

转载于:https://www.cnblogs.com/MasterLin/p/10249019.html

你可能感兴趣的文章
清理缓存的方法 #DF
查看>>
JAVA array,map 转 json 字符串
查看>>
2017-12-27练习
查看>>
NET设计规范(二) 命名规范
查看>>
VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2
查看>>
SSL延迟
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>
深入理解DIP、IoC、DI以及IoC容器
查看>>
赋值文件
查看>>
Vue 数组 字典 template v-for 的使用
查看>>
蓝牙模块选择经验谈
查看>>
java中==和equals
查看>>
CCActionPageTurn3D
查看>>
python random
查看>>
esp32-智能语音-cli(调试交互命令)
查看>>
netty与MQ使用心得
查看>>
关于dl dt dd 文字过长换行在移动端显示对齐的探讨总结
查看>>
swoolefy PHP的异步、并行、高性能网络通信引擎内置了Http/WebSocket服务器端/客户端...
查看>>
Python学习笔记
查看>>
unshift()与shift()
查看>>