Ef core 如何设置主键
在正题之前,先说明几个问题。
(1)写 sql 不好吗,为什么要引入 ORM ?
总的来说由于需求的复杂性增加,引入了面向对象编程,进而有了 ORM ,ORM 使得开发人员以对象的方式表达业务逻辑。对于有些类 sqlHelper 的 ORM 也不能说好还是不好,可能需求不同吧。
(2)实体 Entity 为什么要有主键?
这个是由实体的定义决定的,可标识的对象称之为实体。
(3)主键的类型有哪些?
基本可以分为两类:数值型:int、long;字符串类型:guid 或其他。
主键是数据库对列的约束,具有唯一、非空、不可变的性质。主键的值可以是数据库自增,也可以是程序中设置。
(4)如何选择主键的类型?
主键对于数据库的影响主要是:产生的索引的大小、维护数据的成本(可以理解为插入、更新、查找数据的速度)。数值型类型性能优于字符串类型,数值类型的长度小于字符串类型,所以其表达的范围小于字符串。
Retrieve entity id Before call savechanges?(在调用 savechanges 方法前获取实体 id 的值?)
如果选择 guid,那么可以在程序中直接生成 guid 的值。如果选择 int 类型,则分以下几种情况:
1 导航属性
var contxt = new BloggingContext();
var blog = new Blog()
{
Url = "www",
Rating = 2
};
contxt.Blogs.Add(blog);
var post = new Post() { Blog = blog, Title = "t", Content = "c" };
contxt.Posts.Add(post);
contxt.SaveChanges();
2 HiLo (仅SqlServer支持)
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Add(blog);
Console.WriteLine(blog.BlogId);
db.SaveChanges();
}
3 transaction
var contxt = new BloggingContext();
using (var transaction = await contxt.BeginTransactionAsync())
{
var blog = new Blog()
{
Url = "www",
Rating = 2
};
contxt.Blogs.Add(blog);
contxt.SaveChanges();
var blog2 = new Blog()
{
Url = "www" + blog.BlogId,
Rating = 2
};
contxt.Blogs.Add(blog2);
contxt.SaveChanges();
await transaction.CommitAsync();
}
参考:
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/
https://vladmihalcea.com/database-primary-key-flavors/
Ef core 如何设置主键的更多相关文章
- EF 实体字段设置主键和自增
[Key] //主键 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //设置自增 public int id { get; set; } ...
- Django数据库怎么给字段设置主键
id = models.IntegerField(primary_key = True) 附: null :缺省设置为false.通常不将其用于字符型字段上,比如CharField,TextField ...
- Oracle + Entity Framework 更新没有设置主键的表
最近用Entity Framework 开发的时候,发现一个问题,在默认情况下,EF不能对一个没有主键的表进行更新.插入和删除的动作. 那么,应该怎么处理没有主键的表呢? 我们打开这个表的edmx文件 ...
- PL/SQL设置主键自增
oracle没有设置主键auto increment的功能,需要自己编写序列和触发器实现主键自动递增. 示例: 创建表menu: 一.创建表 create table menu( menuId n ...
- 怎样为DataTable设置主键及找行数据
只要是数据集中都应该存在主键,以确定数据集中唯一的值.那么,我们要如何为DataTable设置主键及利用主键在DataTable索引值呢? 步骤/方法 为DataTable设置主键 DataT ...
- SQL语句建表、设置主键、外键、check、default、unique约束
· 什么是数据库? 存放数据的仓库. · 数据库和数据结构有什么区别? 数据结构要解决在内存中操作数据的问题,数据库要解决在硬盘中操作数据的问题.数据结构研究一些抽象数据模型(ADT)和以及定义在该模 ...
- 关于oracle设置主键自增的问题
关于orcale设置主键自增的问题 关于主键Oracle中并没有提供一个直接的语句设置,对于这个oralce一般都是用序列和触发器来实现 一下又两种方法来实现 一 ,不使用触发器 创建序列: crea ...
- Sql Server设置主键和外键
设置主键 https://jingyan.baidu.com/article/9158e0003349a7a2541228fd.html 设置外键 https://jingyan.baidu.com/ ...
- Oracle 创建表并设置主键自增
创建数据库 CREATE TABLE STUDENT(ID NUMBER PRIMARY KEY, NAME VARCHAR(200) NOT NULL, SEX VARCHAR(200), CREA ...
随机推荐
- [LOJ2865] P4899 [IOI2018] werewolf 狼人
P4899 [IOI2018] werewolf 狼人 LOJ#2865.「IOI2018」狼人,第一次AC交互题 kruskal 重构树+主席树 其实知道重构树的算法的话,难度就主要在主席树上 习惯 ...
- 软件——Ubuntu16.04设置静态ip地址
1.获取网卡名称 在命令行输入ifconfig -a 2.修改网卡配置文件 sudo vim /etc/network/interfaces 加上下面的配置,IP地址可以成适合你的 auto eth0 ...
- 区间dp E - Multiplication Puzzle POJ - 1651
E - Multiplication Puzzle POJ - 1651 这个题目没有特别简单,但是也没有我想象之中的那么难,这个题目时区间dp,因为我们是要对区间进行考虑的. 但是呢,这个也和动态 ...
- mybatis添加信息自动生成主键
一.使用Oracle数据库 举例:添加员工的时候自动生成主键 1.在dao接口中声明方法 2.在mapper中实现该方法 需要先在数据表中创建序列 3.测试 注意:在调用过save方法之后,emp对象 ...
- CC2530应用——按键控制灯光状态变化
独立新建工程并编写.编译代码,实现按键控制灯光闪烁状态的变换,实现以下任务要求:[1]程序开始运行:D4灯闪烁,D3.D5.D6灯熄灭.[2]按下模块上的SW1按键松开后,实现D5.D6灯轮流闪烁.[ ...
- LDheatmap | SNP连锁不平衡图(LD)可视化,自己数据实现版!
本文首发于“生信补给站”,https://mp.weixin.qq.com/s/Gl6BChxSYbSHMo9oMpufPg 连锁不平衡图,用来可视化不同SNP之间的连锁程度,前同事间俗称“倒三角”图 ...
- Python学习之字符串中的下标和切片以及逆序
python中的下标从0开始 从后往前取 注意:后面的2代表步长,先看2:-1取出来的数值 [起始位置:终止位置:步长] 逆序 但是发现如果[-1:0:-1]发现是取不到第一个元素的,那么怎么办? 此 ...
- # C#学习笔记(一)——准备工作
C#学习笔记(一)--准备工作 目录 C#学习笔记(一)--准备工作 1.1 下载安装.NET框架 1.2 创建源代码 1.3 一些基本名称 1.4 简单的命名建议 1.1 下载安装.NET框架 .N ...
- 基于环信SDK的IM即时通讯填坑之路(vue)
公司最近使用第三方环信SDK的进行通信聊天,基本已完成.记录下填坑之路 1.可以通过以下方式引用 WebSDK 1.安装 npm install easemob-websdk --save 2. 先 ...
- LabVIEW(数据库连接)
Driver={Microsoft Access Driver (*.mdb)}; Dbq=路径; Uid=Admin; Pwd=密码; 插入: INSERT INTO xs(学号,姓名,专业名,性别 ...