当前位置: 首页 > news >正文

php网站二次开发用什么软件中国软装网

php网站二次开发用什么软件,中国软装网,国外金融网站设计欣赏,网络推广都有哪些渠道在C#中#xff0c;使用Entity Framework (EF) 框架并不直接涉及到主键的生成策略。主键的生成通常是在数据库层面或者在应用程序层面处理的。雪花主键#xff08;Snowflake ID#xff09;是一种在分布式系统中生成唯一ID的算法#xff0c;它通常是由Twitter的雪花算法演变而… 在C#中使用Entity Framework (EF) 框架并不直接涉及到主键的生成策略。主键的生成通常是在数据库层面或者在应用程序层面处理的。雪花主键Snowflake ID是一种在分布式系统中生成唯一ID的算法它通常是由Twitter的雪花算法演变而来。 雪花主键的特点是在不依赖数据库的情况下能够在分布式系统中生成全局唯一且有序的64位整数ID。这种ID通常用于大数据场景因为它们可以有效地利用缓存、分片、以及分布式系统中的其他优化策略。 下面是一个简单的C#实现雪花主键生成器的例子 csharp代码 public class SnowflakeIdGenerator { private const long epoch 1288834974657L; // 起始时间戳毫秒 private const long workerIdBits 5L; // 机器id所占的位数 private const long datacenterIdBits 5L; // 数据中心id所占的位数 private const long maxWorkerId -1L ^ (-1L workerIdBits); // 支持的最大机器id数量 private const long maxDatacenterId -1L ^ (-1L datacenterIdBits); // 支持的最大数据中心id数量 private const long sequenceBits 12L; // 序列所占的位数 private const long workerIdShift sequenceBits; // 机器ID左移位数 private const long datacenterIdShift sequenceBits workerIdBits; // 数据中心ID左移位数 private const long timestampLeftShift sequenceBits workerIdBits datacenterIdBits; // 时间戳左移位数 private const long sequenceMask -1L ^ (-1L sequenceBits); // 序列掩码 private long workerId; // 机器ID private long datacenterId; // 数据中心ID private long sequence 0L; // 序列 private long lastTimestamp -1L; // 上次生成ID的时间戳 public SnowflakeIdGenerator(long workerId, long datacenterId) { if (workerId maxWorkerId || workerId 0) { throw new ArgumentException(string.Format(worker Id cant be greater than {0} or less than 0, maxWorkerId)); } if (datacenterId maxDatacenterId || datacenterId 0) { throw new ArgumentException(string.Format(datacenter Id cant be greater than {0} or less than 0, maxDatacenterId)); } this.workerId workerId; this.datacenterId datacenterId; } public long NextId() { long timestamp TimeGen(); if (timestamp lastTimestamp) { throw new Exception(string.Format(Clock moved backwards. Refusing to generate id for {0} milliseconds, lastTimestamp - timestamp)); } if (lastTimestamp timestamp) { sequence (sequence 1) sequenceMask; if (sequence 0) { timestamp TilNextMillis(lastTimestamp); } } else { sequence 0L; } lastTimestamp timestamp; return ((timestamp - epoch) timestampLeftShift) | (datacenterId datacenterIdShift) | (workerId workerIdShift) | sequence; } protected long TilNextMillis(long lastTimestamp) { long timestamp TimeGen(); while (timestamp lastTimestamp) { timestamp TimeGen(); } return timestamp; } protected long TimeGen() { return (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds; } } 在这个例子中SnowflakeIdGenerator 类封装了生成雪花主键的逻辑。构造函数接受机器IDworkerId和数据中心IDdatacenterId作为参数这些ID在分布式系统中应该是唯一的。NextId 方法是生成新ID的入口点。它首先检查当前时间戳是否小于上一次生成ID的时间戳如果是则抛出一个异常。然后根据时间戳是否相同来递增序列或等待下一个毫秒。最后通过位运算组合时间戳、数据中心ID、机器ID和序列来生成最终的雪花主键。 在Entity Framework (EF) 中使用雪花主键生成器你需要将生成的雪花ID作为实体的主键值。这通常涉及到几个步骤 定义实体类并在其中指定主键属性。在DbContext中配置实体以便EF知道如何使用雪花主键生成器。在应用程序启动时初始化雪花主键生成器并将其注入到需要它的服务中。 下面是一个简单的示例展示如何在EF Core中使用雪花主键生成器 首先定义你的实体类并指定主键属性 csharp代码 public class MyEntity { public long SnowflakeId { get; set; } // 这是雪花主键 // 其他属性... } 然后在DbContext中配置实体使用HasDefaultValueSql方法来指定在插入新记录时如何生成雪花ID csharp代码 public class MyDbContext : DbContext { public DbSetMyEntity MyEntities { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.EntityMyEntity() .HasKey(e e.SnowflakeId) // 设置SnowflakeId为主键 .ForSqlServerHasDefaultValueSql(DEFAULT(NEXT VALUE FOR SnowflakeSequence)); // 使用SQL Server的序列 // 其他配置... } } 请注意上面的代码使用了ForSqlServerHasDefaultValueSql方法这是针对SQL Server数据库的。如果你使用的是其他数据库提供程序你需要使用相应的方法来配置默认值。 接下来你需要创建一个雪花ID序列以便数据库可以生成ID。这通常在数据库迁移脚本中完成。以下是一个SQL Server的示例 sql代码 CREATE SEQUENCE SnowflakeSequence AS BIGINT START WITH 1 INCREMENT BY 1; 然后在应用程序启动时例如在Startup.cs或Program.cs中你需要初始化雪花主键生成器并将其注入到EF Core的上下文中。这可以通过依赖注入来实现 csharp代码 public void ConfigureServices(IServiceCollection services) { // ... 其他服务配置 ... // 配置雪花主键生成器 services.AddSingletonISnowflakeIdGenerator, SnowflakeIdGenerator(serviceProvider { // 获取配置的服务例如应用程序设置或配置文件中的workerId和datacenterId var workerId // 从配置中获取workerId; var datacenterId // 从配置中获取datacenterId; return new SnowflakeIdGenerator(workerId, datacenterId); }); // 添加DbContext并配置依赖注入 services.AddDbContextMyDbContext(options { // 从依赖注入容器中获取雪花主键生成器 var snowflakeIdGenerator serviceProvider.GetServiceISnowflakeIdGenerator(); // 配置DbContext使用雪花主键生成器 options.UseSqlServer(yourConnectionString, sqlServerOptionsAction: sqlOptions { // 配置其他SQL Server选项... }) .EnableSensitiveDataLogging(true) // 根据需要启用或禁用 .UseInternalServiceProvider(serviceProvider); // 使用内部服务提供者来解析依赖项 }); // ... 其他服务配置 ... } 在这个例子中ISnowflakeIdGenerator是一个接口它定义了生成雪花ID的方法。你可以根据你的需要实现这个接口并在依赖注入容器中注册实现。然后在配置DbContext时你可以从服务提供者中获取这个实现并使用它来配置如何生成主键。 请注意这个方法将雪花ID的生成逻辑从EF Core中分离出来允许你更容易地测试和替换主键生成策略。此外这种方法还允许你在不使用EF Core的情况下生成雪花ID例如在需要手动插入记录到数据库的场景中。
http://www.pierceye.com/news/288231/

相关文章:

  • 别人做的网站直播网站
  • 足球梦网站建设的基本思路沧州做企业网站
  • 招标建设网站什么是微信wordpress
  • 建设银行网站连不上成都网站快照优化公司
  • 网站 永久关停 请示广州网站建设骏域网站
  • 个人建站模板外国网站翻墙怎么做
  • 保定网站设计制作公司有经验的中山网站建设
  • 免费网站建设那个好wordpress本地怎么上传服务器
  • 自己做的网站加载慢WordPress模板首页文件是啥
  • 教学网站建设网站建设岗位有哪些
  • 网站建设合同的验收表网页网站的区别是什么
  • 开福区网站建设中wordpress调用所有栏目
  • 网站建设的流程是什么意思青岛做网站公司
  • 什么网站有项目做中铁建设企业门户网
  • 网站域名商代理商安卓商店
  • 深圳中英文网站建设广州知名设计公司排名
  • 一个公司设计网站怎么做的蜜桃传奇免费网页版
  • 网络推广网站培训班有人用wordpress默认主题
  • 网站建设 后台南宁做网站方案
  • 在线制作插画网站网站建设有哪些公司
  • 合肥的网站建设剂屏自己可以做开奖网站吗
  • 官网设计比较好看的网站学校网站建设对教学的意义
  • 济南建站推荐企汇优见效付款毕设代做网站招聘
  • 泰然建设网站免费软件app下载大全正能量网站
  • 张掖市网站建设北京代理记账财务公司
  • 中铁建设集团网站网络公司手机网站
  • 站长工具是什么意思建设银行网站 开户行怎么查
  • 做简历模板的网站都有哪些wordpress是啥东西
  • 网站流量渠道湖州做网站优化
  • 汽车网站哪个好预付的网站开发费用怎么入账