EFcore笔记之创建模型
排除属性: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笔记之创建模型的更多相关文章
- 01-EF Core笔记之创建模型
使用EF Core的第一步是创建数据模型,模型建的好,下班走的早.EF Core本身已经设置了一系列约定来帮我们快速的创建模型,例如表名.主键字段等,毕竟约定大于配置嘛.如果你想改变默认值,很简单,E ...
- EntityFramework Core 学习笔记 —— 创建模型
原文地址:https://docs.efproject.net/en/latest/modeling/index.html 前言: EntityFramework 使用一系列的约定来从我们的实体类细节 ...
- V-rep学习笔记:机器人模型创建3—搭建动力学模型
接着之前写的V-rep学习笔记:机器人模型创建2—添加关节继续机器人创建流程.如果已经添加好关节,那么就可以进入流程的最后一步:搭建层次结构模型和模型定义(build the model hierar ...
- V-rep学习笔记:机器人模型创建2—添加关节
下面接着之前经过简化并调整好视觉效果的模型继续工作流,为了使模型能受控制运动起来必须在合适的位置上添加相应的运动副/关节.一般情况下我们可以查阅手册或根据设计图纸获得这些关节的准确位置和姿态,知道这些 ...
- thinkphp3.2笔记(5)创建项目 创建模型 实例化
一 创建项目 1 拷贝框架 目录 public thinkphp .htaccess index.php [application不用拷贝,会自动生成] 2 public 下面创 ...
- [PyTorch 学习笔记] 3.1 模型创建步骤与 nn.Module
本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson3/module_containers.py 这篇文章来看下 ...
- 操作系统学习笔记----进程/线程模型----Coursera课程笔记
操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...
- Django:学习笔记(2)——创建第一个应用
Django:学习笔记(2)——创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...
- 运维开发笔记整理-Django模型语法
运维开发笔记整理-Django模型语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模型基本概念 1>.什么是模型 模型是你的数据唯一的,权威的信息源.它包含你所存储数 ...
随机推荐
- 常规RPC通讯过程【转载】
在 HTTP2 协议正式开始工作前, 如果已经知道服务器是 HTTP2 的服务器, 通讯流程如下: 客户端必须首先发送一个连接序言,其逻辑结构: PRI * HTTP/2.0\r\n\r\nSM\r\ ...
- 理解UIView的绘制-孙亚洲
前言 最近研究OpenGL ES相关和 GPU 相关 发现这篇文章很具有参考的入门价值. 理解 UIView 的绘制, UIView 是如何显示到 Screen 上的? 首先要从Runloop开始说, ...
- Generic programming-泛型编程
Generic programming is a style of computer programming in which algorithms are written in terms of t ...
- 脚本_统计每个远程IP访问本机apache的次数
#!bin/bash#功能:统计每个远程IP访问本机apache的次数#作者:liusingbonawk '{ip[$1]++} END{for(i in ip){print ip[i],i}}' ...
- 全球NTP服务器列表
全球- pool.ntp.org 欧洲- europe.pool.ntp.org 亚洲- asia.pool.ntp.org 大洋洲- oceania.pool.ntp.org 北美- north-a ...
- [Atcoder Code Festival 2017 Qual B Problem F]Largest Smallest Cyclic Shift
题目大意:给你\(A\)个a,\(B\)个b,\(C\)个c,要你构造一个字符串,使它的最小循环表示法最大.求这个表示法.解题思路:不知道怎么证,但把a.b.c当做单独的字符串扔进容器,每次把字典序最 ...
- EXGSBS模板
EXBSGS模板 我之前把有一处b和c弄反了,有点困...然后调了半天 (exbsgs比excrt简单多了) 求x的最小正整数解 原式子拆成 在bsgs中,保证a,b互质,这样求出的逆元挪过去才对 但 ...
- python--(常用模块-1)
python--(常用模块-1) 一.模块的简单认识: 什么是模块,模块就是我们把装有特有功能的代码进行归类的结果,从代码编写的单位来看我们的程序,从小到大的顺序:一条代码<语句块<代码块 ...
- tableau desktop(三)--构建数据视图(二)
前段时间忙于工作的事情,好久没有来记录一点东西了,今天利用周末做点记录吧,近期因为工作的原因,也有两三周没实用tableau了.今天继续上一篇构建数据试图(二). 3.7 參考线和參考区间 參考线通经 ...
- Mongodb简单介绍
1. 简单介绍 Mongodb是一种强大.灵活,可扩展的数据存储方式.属于nosql.非关系型数据库的一种. mongodb是面向文档的数据库. 尽管是非关系型数据库.可是它保留了很多关系型数据库的特 ...