zoukankan      html  css  js  c++  java
  • 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="004", AName="测试11" },
                    new JoinA(){ACode="004", AName="测试21" },
                    new JoinA(){ACode="004", AName="测试31" },
                    new JoinA(){ACode="004", AName="测试41" },
                    new JoinA(){ACode="004", AName="测试51" },
                    new JoinA(){ACode="004", 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'
  • 相关阅读:
    Pytorch版本yolov3源码阅读
    Darknet卷基层浅层特征可视化教程
    YOLOv3-darknet 内容解析
    YOLOv2-darknet 内容解析
    YOLOv1-darknet 内容解析
    Qt5.2+opencv2.4.9配置安装过程
    Android程序示例
    【Cuda编程】加法归约
    算法设计与分析课程的时间空间复杂度
    【算法分析】实验 4. 回溯法求解0-1背包等问题
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/10536527.html
Copyright © 2011-2022 走看看