除了自增长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. 在 Ubuntu上使用 MySQL

    MySQL 安装配置 https://help.ubuntu.com/12.04/serverguide/mysql.html MySQL Manual http://dev.mysql.com/do ...

  2. 域模型中的实体类分为四种类型:VO、DTO、DO、PO

    经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应 ...

  3. Android开发如何定制framework层服务

    刚刚跨完年,新年第一篇文章,那么今天将对Android开发framework中间层的服务定制使用作个总结.首先我们先导入Android平台源码framework层的代码到开发工具eclipse中,代码 ...

  4. Heap memory compared to stack memory

  5. OpenStack 学习笔记 (三)

    个人网站:臭蛋www.choudan.net 一直苦于不知道如何加入到开源社区参与开发,感受开源社区分布式协作开发和巨神们coding的魅力,特意在网上查了资料,直接指导的很少,还得的靠官网上的文档. ...

  6. css预处理器(sass)

    学过CSS的人都知道,它不是一种编程语言.你可以用它开发网页样式,但是没法用它编程.也就是说,CSS基本上是设计师的工具,不是程序员的工具.在程序员眼里,CSS是一件很麻烦的东西.它没有变量,也没有条 ...

  7. Informatica 9.5安装部署

    Informatica  结构 1个或多个资源库(Respository) PowerCenter数据整合引擎是基于元数据驱动的,提供了基于数据驱动的元数据知识库(Repository),该元数据知识 ...

  8. 一些很酷的.Net技巧 .

    一..Net Framework 1.  如何获得系统文件夹 使用System.Envioment类的GetFolderPath方法:例如: Environment.GetFolderPath( En ...

  9. [翻译] VLDContextSheet

    VLDContextSheet 效果: A clone of the Pinterest iOS app context menu. 复制了Pinterest应用的菜单效果. Example Usag ...

  10. 点开无线显示"已连接 安全",但是点击下面无线图标却显示"无法连接internet",解决方案

    管理员权限运行“命令提示符” 输入:netsh winsock reset 然后重启电脑即可