• 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'
  • 相关阅读:
    防火墙iptables 设置
    CentOS 6.5系统中安装配置MySQL数据库
    判断服务是否开启,应用是否安装,并安装应用
    判断是移动端还是PC端
    二维码的生成细节和原理
    onclick 常用手册
    PHP json_encode函数中需要注意的地方
    利用PHP SOAP扩展实现简单Web Services
    Symfony2学习笔记之事件分配器
    听 Fabien Potencier 谈Symfony2 之 《What is Symfony2 ?》
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/10536527.html
Copyright © 2020-2023  润新知