排除属性: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<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property<DateTime>("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<Person> People { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasIndex(p => new { p.FirstName, p.LastName }); //多个列指定一个索引。
//modelBuilder.Entity<Blog>() .HasIndex(b => b.Url); //单个属性指定索引
//modelBuilder.Entity<Blog>() .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<Car> Cars { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Car>()
.HasAlternateKey(c => c.LicensePlate);
//modelBuilder.Entity<Car>()
.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; }
}

EFcore笔记之创建模型的更多相关文章

  1. 01-EF Core笔记之创建模型

    使用EF Core的第一步是创建数据模型,模型建的好,下班走的早.EF Core本身已经设置了一系列约定来帮我们快速的创建模型,例如表名.主键字段等,毕竟约定大于配置嘛.如果你想改变默认值,很简单,E ...

  2. EntityFramework Core 学习笔记 —— 创建模型

    原文地址:https://docs.efproject.net/en/latest/modeling/index.html 前言: EntityFramework 使用一系列的约定来从我们的实体类细节 ...

  3. V-rep学习笔记:机器人模型创建3—搭建动力学模型

    接着之前写的V-rep学习笔记:机器人模型创建2—添加关节继续机器人创建流程.如果已经添加好关节,那么就可以进入流程的最后一步:搭建层次结构模型和模型定义(build the model hierar ...

  4. V-rep学习笔记:机器人模型创建2—添加关节

    下面接着之前经过简化并调整好视觉效果的模型继续工作流,为了使模型能受控制运动起来必须在合适的位置上添加相应的运动副/关节.一般情况下我们可以查阅手册或根据设计图纸获得这些关节的准确位置和姿态,知道这些 ...

  5. thinkphp3.2笔记(5)创建项目 创建模型 实例化

    一 创建项目 1 拷贝框架 目录   public   thinkphp  .htaccess  index.php    [application不用拷贝,会自动生成] 2   public 下面创 ...

  6. [PyTorch 学习笔记] 3.1 模型创建步骤与 nn.Module

    本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson3/module_containers.py 这篇文章来看下 ...

  7. 操作系统学习笔记----进程/线程模型----Coursera课程笔记

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

  8. Django:学习笔记(2)——创建第一个应用

    Django:学习笔记(2)——创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

  9. 运维开发笔记整理-Django模型语法

    运维开发笔记整理-Django模型语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模型基本概念 1>.什么是模型 模型是你的数据唯一的,权威的信息源.它包含你所存储数 ...

随机推荐

  1. Axios 网络请求组件封装 (鉴权、刷新、拦截)

    一.前言 注意:本教程需要你对axios有一定的了解,不适用于小白(只能借鉴,希望你能自己动手),注释都写的很清楚.此封装并非完整版,已进行部分删减修改操作,但仍然适用于大部分业务场景,如果不适用于你 ...

  2. Python学习——BeautifulSoup篇

    BeautifulSoup     Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beau ...

  3. JAVA 日期工具类的总结

    一般,在项目中,我们会会经常使用到日期的各种方式的处理,在各个业务逻辑操作中,都需要相关的日期操作,因此,实现项目中的日期工具类的提出,还是十分重要的,下面,就项目中常用到的日期的相关操作方式,做了一 ...

  4. C++下面关于字符串数组的一些操作

    今天在写一个搜索引擎的分词系统,是很简单的那种,但是居然费了我一天的时间还没完成,晚上估计还得弄一会了,但是在这个过程中,遇到了集中关于字符串数组的操作,值得和大家分享一下. 首先是关于统计字符串数组 ...

  5. 脚本_使用expect自动交互远程主机安装软件

    #!bin/bash#功能:使用expect工具自动交互密码,远程到其它主机,安装httpd软件#作者:liusingbon#删除~/.ssh/known-hosts后,ssh远程任何主机,系统都会询 ...

  6. CentOS 6.5下部署日志服务器 Rsyslog+LogAnalyzer+MySQL

    简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取,所 ...

  7. Kattis - bela

    Bela Young Mirko is a smart, but mischievous boy who often wanders around parks looking for new idea ...

  8. Pyhton学习——Day54

    #Django内容回顾# -请求响应HTTP协议(有.无状态)默认传递的是字符串# 传递字符串分为两个部分:1.http1.1 GET /url /index + 请求头# Provisional h ...

  9. fullcalendar日历插件

    https://www.helloweba.net/javascript/231.html

  10. 百度api使用说明

    .初始化地图,并设置地图中心点 复制代码 https://www.cnblogs.com/zqzjs/p/5293698.html var map = new BMap.Map("allma ...