EF中的Guid主键
除了自增长ID(int),我们还能把主键设置为GUID类型的。
创建我们的数据表
CREATE TABLE dbo.JoinA(
AGUID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWSEQUENTIALID() NOT NULL,
AName NVARCHAR(50) NULL,
ACode NVARCHAR(50) NULL
)
实体映射:注解:https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-annotations
[Table("JoinA")]
public class JoinA
{
[Column("AGUID")]
//需要标识为自增长,不然会给你生成 00000000-0000-0000-0000-000000000000,多条数据就会重复
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; } //主键设置为id
public string AName { get; set; }
public string ACode { get; set; }
}
或者:
[Table("JoinB")]
public class JoinB
{
[Key]
[Column("BGUID")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid BGUID { get; set; } //如果没有标识为id,需要我们 [Key] 来注解
public string BName { get; set; }
public string ACode { get; set; }
}
上下文:
public class MyContext : DbContext
{
public MyContext()
: base("name=EFTestEntities")
{
} //protected override void OnModelCreating(DbModelBuilder modelBuilder)
//{
// //modelBuilder.Entity<JoinA>().Property(x => x.AGUID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
// //modelBuilder.Entity<JoinB>().Property(x => x.BGUID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
// base.OnModelCreating(modelBuilder);
//} public virtual DbSet<JoinA> JoinAs { get; set; }
public virtual DbSet<JoinB> JoinBs { get; set; }
}
测试:
[HttpGet]
public async Task<IHttpActionResult> Test()
{
List<JoinA> joins = new List<JoinA>
{
new JoinA(){ACode="", AName="测试11" },
new JoinA(){ACode="", AName="测试21" },
new JoinA(){ACode="", AName="测试31" },
new JoinA(){ACode="", AName="测试41" },
new JoinA(){ACode="", AName="测试51" },
new JoinA(){ACode="", AName="测试61" },
};
db.JoinAs.AddRange(joins);
await db.SaveChangesAsync();
return await Task.FromResult(Ok(db.JoinAs));
}

Guid效率会比int低一些,但是对于我们的数据迁移是非常好的。
Insert一条语句为:
exec sp_executesql N'DECLARE @generated_keys table([AGUID] uniqueidentifier)
INSERT [dbo].[JoinA]([AName], [ACode])
OUTPUT inserted.[AGUID] INTO @generated_keys
VALUES (@0, @1)
SELECT t.[AGUID]
FROM @generated_keys AS g JOIN [dbo].[JoinA] AS t ON g.[AGUID] = t.[AGUID]
WHERE @@ROWCOUNT > 0',N'@0 nvarchar(max) ,@1 nvarchar(max) ',@0=N'dddd',@1=N'ceee'
EF中的Guid主键的更多相关文章
- 基于SqlSugar的开发框架循序渐进介绍(4)-- 在数据访问基类中对GUID主键进行自动赋值处理
我们在设计数据库表的时候,往往为了方便,主键ID一般采用字符串类型或者GUID类型,这样对于数据库表记录的迁移非常方便,而且有时候可以在处理关联记录的时候,提前对应的ID值.但有时候进行数据记录插入的 ...
- SQLite3中自增主键相关知识总结,清零的方法、INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用
这篇文章主要介绍了SQLite3中自增主键相关知识总结,清零的方法.INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用等,需要的朋友可以参考下 一.SQLite清空表 ...
- PostgreSQL数据库中获取表主键名称
PostgreSQL数据库中获取表主键名称 一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute. ...
- SQL语句获取数据库中的表主键,自增列,所有列
SQL语句获取数据库中的表主键,自增列,所有列 获取表主键 1:SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_U ...
- SQL查找数据库中所有没有主键的数据表脚本
--SQL查找数据库中所有没有主键的数据表脚本 --运行脚本后在消息中可能会显示下面现象中的一种:--(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)--(2)当前数据表[数据表名]没有主 ...
- ORACLE中添加删除主键
本文转自:http://blog.chinaunix.net/uid-17079336-id-2832443.html 1.创建表的同时创建主键约束(1)无命名create table student ...
- Oracle中给表主键、外键收集
1.创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar ...
- Jdbc获取oracle中guid主键
上代码 String sql = "BEGIN insert into itil_task_plan (PLAN_CODE) values (?) returning id into ?; ...
- SQLite3中自增主键
SQLite清空表并将自增列归零 SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容. 但SQLite不支持这个语句.在SQLite中直接使用 DELETE FROM TableNa ...
随机推荐
- 由上一个血案引发的关于property和attribute关系的思考
boss说,学习要刨根问底. 好的,开刨. 一.property和attribute在英语里有什么区别 看似没有区别.但其实大神说: property是 物体本身自带属性,不能改变的(一旦改了就是另外 ...
- jQuery轮播图(一)轮播实现并封装
利用面向对象自己动手写了一个封装好的jquery轮播组件,可满足一般需求,不仅使用简单且复用性高. demo:点此预览 代码地址:https://github.com/zsqosos/componen ...
- jquery操作select(选中,取值)
最近工作中总出现select 和 option问题,整理一下,内容大部分源于网络资料 一.基础取值问题 例如<select class="selector"></ ...
- 强化学习系列之:Deep Q Network (DQN)
文章目录 [隐藏] 1. 强化学习和深度学习结合 2. Deep Q Network (DQN) 算法 3. 后续发展 3.1 Double DQN 3.2 Prioritized Replay 3. ...
- iOS友盟分享的使用总结
现在几乎所有的APP都会集成分享,为了可以更好的推广自己的APP. 目前市面上常用的分享无非就三个: 1.友盟分享; 2.shareSDK(mob); 3.苹果原生. 由于苹果原生的分享使用起来不方便 ...
- Angular之 Scope和 Directive
---------------------------Scope-------------------------------- https://docs.angularjs.org/guide/sc ...
- 三、angularjs上传图片
上传图片需要引入插件ngFileUpload,使用bower安装方法: bower install ng-file-upload --save,安装后需要在命名app的名字js文件中注入,如下所示: ...
- Software Testing Techniques Homework 3
1. a.This is the chart b. initial numPrimes = 4, t1 would over the loop. c. t = ( n = 1) d. node cov ...
- c# 设计模式 之:简单工厂、工厂方法、抽象工厂之小结、区别
很多时候,我发现这三种设计模式难以区分,常常会张冠李戴闹了笑话.很有必要深入总结一下三种设计模式的特点.相同之处和不同之处. 1 本质 三个设计模式名字中都含有“工厂”二字,其含义是使用工厂(一个或一 ...
- 用FileZilla Server开FTP
FileZilla(教程)是经典的开源FTP解决方案,包括FileZilla客户端和FileZilla Server.其中,FileZilla Server的功能比起商业软件FTP Serv-U毫不逊 ...