排除属性: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. Maven配置,使用IntelliJ IDEA和Maven创建Java Web项目

    1. 下载Maven 官方地址:http://maven.apache.org/download.cgi 解压并新建一个本地仓库文件夹 2.配置本地仓库路径   3.配置maven环境变量     4 ...

  2. 页面加载通过javascript来修改控件属性

    function changeFormElementStatus(tagNames) {            var tagNameArr = tagNames.split("," ...

  3. Java回忆录之英勇黄铜V

    说实话最近心好累,就因为一个混合app开发贼简单的一个功能.我本以为很简单,做起来却发现需要很多知识面.麻雀虽小五脏俱全,即使再小的一个功能实现起来也需要很全面的知识来担保.要想盖高楼大厦啊必定要有坚 ...

  4. mybatis中if及concat函数的使用

  5. LayUI中select下拉框选中触发事件

    代码: var form = layui.form, layer = layui.layer; // 监听 $(document).ready(function() { // select下拉框选中触 ...

  6. 路飞学城Python-Day25

  7. PHP中的 Iterator 与 Generator

    在讲解生成器之前先介绍一下迭代器: 在 PHP 中,通常情况下遍历数组使用 foreach 来遍历. 如果我们要想让一个对象可以遍历呢? PHP 为我们提供了 Iterator 接口,只要实现了这个接 ...

  8. 2019-03-14 Python爬虫问题 爬取网页的汉字打印出来乱码

    html = requests.get(YieldCurveUrl, headers=headers) html=html.content.decode('UTF-8') # print(html) ...

  9. myeclipse如何取消某一个文件的校验

  10. RabbitMQ消息可靠性分析 - 简书

    原文:RabbitMQ消息可靠性分析 - 简书 有很多人问过我这么一类问题:RabbitMQ如何确保消息可靠?很多时候,笔者的回答都是:说来话长的事情何来长话短说.的确,要确保消息可靠不只是单单几句就 ...