除了自增长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. 一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面

    SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程.内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只 ...

  2. bootstrap fileinput +springmvc图片上传-krajee

    引入的文件 <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-fileinput/4.4.9/css/filei ...

  3. ps入门教程:photoshop工作界面

    请大家安装好PS(这不是废话嘛……),然后将PS的界面熟悉一下,消除对PS的惧怕心理~~学会新建文件和保存文件,学会设置参考线. 安装完毕后,打开PS,就进入了PS的操作界面,我们来看一下[图1.1] ...

  4. Java线程的周期及五种状态

    线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌握了 ...

  5. php中怎么理解Closure的bind和bindTo

    bind是bindTo的静态版本,因此只说bind吧.(还不是太了解为什么要弄出两个版本) 官方文档: 复制一个闭包,绑定指定的$this对象和类作用域. 其实后半句表述很不清楚. 我的理解: 把一个 ...

  6. php判断网站收录情况

    php判断网站收录情况 <?php //检测网页是否被百度收录 function checkBaiduIndex($url){ $url='http://www.baidu.com/s?wd=' ...

  7. 应用程序 调用 webservice

    首先用VS创建一个WebService服务工程,并且完成基本功能,本人完成的是html转pdf功能. 然后,新建一个Windows应用程序. 添加WebService到Windows项目中,如图 然后 ...

  8. 对于当下国产CPU如火如荼有感

    国家在国家战略层面去做国产CPU这个事情,从初衷来说是好的.国产CPU战略如果能够实现,则会大大加强我国在计算机产业领域从头到尾的话语权与技术竞争力.但是个人觉得,事情不是那么简单.我将从下面几个方面 ...

  9. [翻译] WZFlashButton

    WZFlashButton This is a custom button with flash-like effect. Inspired by Ripple Effect. 这是一个自定义的按钮, ...

  10. Effective C++(20) 继承与面向对象设计

    本文主要参考<Effective C++ 3rd>中的第六章部分章节的内容. 关注的问题集中在继承.派生.virtual函数等.如: virtual? non-virtual? pure ...