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 ...
随机推荐
- 为什么要学习微信小程序直播开发?最新的小程序直播介绍和优势分析!
小程序直播的介绍 “小程序直播”是微信提供给开发者的实时视频直播工具,包括直播管理端.主播端和观众端等模块,支持提供常用的用户互动和营销促销工具. 开发者只需在小程序中引入相关代码并在管理后台完成配置 ...
- 王颖奇 201771010129《面向对象程序设计Java》第十八周实验总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- Algorithms - Priority Queue - 优先队列
Priority queue - 优先队列 相关概念 Priority queue优先队列是一种用来维护由一组元素构成的集合S的数据结构, 其中的每一种元素都有一个相关的值,称为关键字(key). 一 ...
- 仿真FFT(quartus安装)
软件下载:http://dl.altera.com/13.1/?edition=subscription 安装步骤: 接下来,仿真FFT: http://www.openhw.org/article/ ...
- 设计模式GOF23之单例模式
单例模式的五种方式 主要:懒汉式,饿汉式 其他:双重检测锁(Double Checking模式),静态内部类,枚举模式 选取时机 延时加载,占用内部资源大:静态内部类好于懒汉 不延时加载,占用内部资源 ...
- [hdu5213]容斥原理+莫队算法
题意:给一个序列a,以及K,有Q个询问,每个询问四个数,L,R,U,V, 求L<=i<=R,U<=j<=V,a[i]+a[j]=K的(i, j)对数(题目保证了L <= ...
- Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理
(一)相关概念 逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先需要了解逻辑卷管理中的一些概念. 物理卷(Physical Volume, ...
- flink入门学习
Flink学习笔记 一.简介 1.定义: 针对流数据和批数据的分布式处理引擎.它主要是由 Java 代码实现.. 2.应用场景: 流数据:把所有任务当成流来处理,处理观察和分析连续事件产生的数 ...
- HDU 2014 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2014 题目大意:给你 n 个数,去掉 max 和 min ,求平均数 解题思路: 很水,边记录分数,边 ...
- 前端组件:支持多选,支持选项筛选的下拉框选择器(基于Jquery和Bootstrap)
效果图一:多选 效果图二:选项筛选 最后奉献源码,复制出来直接可用 <!DOCTYPE html> <html> <head> <meta charset=& ...