除了自增长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主键的更多相关文章

  1. 基于SqlSugar的开发框架循序渐进介绍(4)-- 在数据访问基类中对GUID主键进行自动赋值处理

    我们在设计数据库表的时候,往往为了方便,主键ID一般采用字符串类型或者GUID类型,这样对于数据库表记录的迁移非常方便,而且有时候可以在处理关联记录的时候,提前对应的ID值.但有时候进行数据记录插入的 ...

  2. SQLite3中自增主键相关知识总结,清零的方法、INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用

    这篇文章主要介绍了SQLite3中自增主键相关知识总结,清零的方法.INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用等,需要的朋友可以参考下 一.SQLite清空表 ...

  3. PostgreSQL数据库中获取表主键名称

    PostgreSQL数据库中获取表主键名称 一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute. ...

  4. SQL语句获取数据库中的表主键,自增列,所有列

    SQL语句获取数据库中的表主键,自增列,所有列   获取表主键 1:SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_U ...

  5. SQL查找数据库中所有没有主键的数据表脚本

    --SQL查找数据库中所有没有主键的数据表脚本 --运行脚本后在消息中可能会显示下面现象中的一种:--(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)--(2)当前数据表[数据表名]没有主 ...

  6. ORACLE中添加删除主键

    本文转自:http://blog.chinaunix.net/uid-17079336-id-2832443.html 1.创建表的同时创建主键约束(1)无命名create table student ...

  7. Oracle中给表主键、外键收集

    1.创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar ...

  8. Jdbc获取oracle中guid主键

    上代码 String sql = "BEGIN insert into itil_task_plan (PLAN_CODE) values (?) returning id into ?; ...

  9. SQLite3中自增主键

    SQLite清空表并将自增列归零 SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容. 但SQLite不支持这个语句.在SQLite中直接使用 DELETE FROM TableNa ...

随机推荐

  1. Java:类加载器(ClassLoader)

    听上去很高端,其实一般自定义类加载器不需要用户去实现解析的过程,只要负责实现获取类对应的.class字节流部分就ok了,摘录深入理解Java虚拟机的一段话 虚拟机设计团队把类加载阶段中的“通过一个类的 ...

  2. jQuery UI简单的讲解

    我们先进入一下问答时间,你都知道多少呢? (1)什么是jQuery UI 呢? 解答:jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互. ...

  3. 状态开关(ToggleButton)

    状态开关(ToggleButton): 常用属性:isChecked(是否被选中,如true) 监听:1.监听方法:setOnCheckedChangeListener 2.监听器:CompoundB ...

  4. QQ群文件下载速度慢-解决办法

    QQ群文件下载速度慢-解决办法 本方法是本人亲测测试出来的,特此和大家分享 没有效果让你打我 解决方法 1.打开[手机版 QQ] 2.进入群文件,找到需要下载文件 3.[分享],先点击[发给好友],选 ...

  5. java中字节流与字符流以及字节流多余字节问题

    1.字节流 字节流byte为单位对文件的数据进行写入与读取操作.字节的方式在复制音频图片文件时比较适用,但在对于普通文件的读写上有两大缺陷: 第一,字节流在读取中文字符时,若设定的字节数组长度刚好末尾 ...

  6. python迭代器 生成器 三元运算 列表解析

    1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...

  7. VISO画UML用例图添加Include关系的方法

    VISO画UML用例图添加Include关系的方法 今天用Microsoft Visio 2007画用例图时,发现visio UML用例里面找不到include关系,查到一个可行的解决办法:  1)创 ...

  8. Django中请求的生命周期 和 FBV模式和CBV模式

    Django的生命周期就是你的 一个请求所发生的整个流程 Django的生命周期内到底发生了什么呢?? . 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏 ...

  9. CSS学习---css基础知识0105

    CSS, Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. 举例:颜色,大小,高度.宽度.内外边距.边框.浮动.定位.字 ...

  10. 期末作品项目+ppt+设计文档,电子商城的实现,PC+IOS

    先透露几张图 ---- 可以作为文档模板来用... 下载地址 https://dev.tencent.com/u/whuanle/p/IOS_work/attachment/4563020