社区首页 >问答首页 >Ef Core 3.1根据属性生成主键

Ef Core 3.1根据属性生成主键
EN

Stack Overflow用户
提问于 2020-07-13 14:57:43
回答 4查看 258关注 0票数 0

如何根据对象的属性生成主键?我需要像hash这样的东西。但是稳定的散列;

代码语言:javascript
代码运行次数:0
复制
public Object1 {
   public Object1(string property1, DateTime property2)
   {
      Property1 = property1;
      Property2 = property2;
      StableHashID = GetStableHash();
   }
   
   [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
   public int StableHashID { get; private set; } 

   public string Property1 { get; private set; }

   public DateTime Property2 { get; private set; }

   public int GetStableHash()
   {
      return ...; // ???
   }

}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-07-15 08:17:48

我找到了另一个解决方案。

代码语言:javascript
代码运行次数:0
复制
 public override int GetStableHash()
        {
            int result = GetDeterministicHashCode(ErrorCode.ToString());
            result = (result * 397) ^ (GetDeterministicHashCode(Property1.ToString()));
            result = (result * 397) ^ (GetDeterministicHashCode(Property2.ToString()));
            return result;
        }

// https://stackoverflow.com/questions/5154970/how-do-i-create-a-hashcode-in-net-c-for-a-string-that-is-safe-to-store-in-a
        private int GetDeterministicHashCode(string str)
        {
            unchecked
            {
                int hash1 = (5381 << 16) + 5381;
                int hash2 = hash1;

                for (int i = 0; i < str.Length; i += 2)
                {
                    hash1 = ((hash1 << 5) + hash1) ^ str[i];
                    if (i == str.Length - 1)
                        break;
                    hash2 = ((hash2 << 5) + hash2) ^ str[i + 1];
                }
                return hash1 + (hash2 * 1566083941);
            }
        }
票数 -1
EN

Stack Overflow用户

发布于 2020-07-13 15:09:48

Guid就足够了。如果您只使用Id列作为索引,Guid.NewGuid()将为您生成一个很好散列。

Guid.NewGuid() makes an actual guid with a unique value, what you probably want.

Guid.NewGuid() vs. new Guid()

但是,如果您在解密hash后找到object值,则可以检查;

Encrypting & Decrypting a String in C#

票数 1
EN

Stack Overflow用户

发布于 2020-07-13 15:20:54

在没有反射的情况下:

代码语言:javascript
代码运行次数:0
复制
   public int GetStableHash()
   {
      var now = DateTime.Now;
      var nowInt = (int) now.Kind;
      var nowTicks = (ulong) now.Ticks;
      return (((ulong) nowInt) << 62) | nowTicks;
   }

具有属性:https://stackoverflow.com/a/12393880

编辑:

但我仍然认为GUID已经足够好了--自动生成,增量式的,有EFCore的好处(例如。更新方法)等。

Fluent API:

代码语言:javascript
代码运行次数:0
复制
public override void Configure(EntityTypeBuilder<Entity> entityBuilder)
{
      entityBuilder.Property(entity => entity.Id).HasDefaultValueSql("NEWID()");   
}

或者使用注释:[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62878557

复制
相关文章
EF Core 3.1 入门视频-03 设置字段属性
http://mpvideo.qpic.cn/0b78waaacaaamaaj2mtojzpvbmgdagyaaaia.f10002.mp4?dis_k=1595f983c4d9d6ba2deca7e
宿春磊Charles
2022/03/29
2550
EF Core 3.1 入门视频-11 配置 EF Core
http://mpvideo.qpic.cn/0bf2fqaacaaa3majyklonbpvalgdaewaaaia.f10002.mp4?dis_k=3fe082559d1823e51dbaa11
宿春磊Charles
2022/03/29
5010
EF Core利用Scaffold从根据数据库生成代码
在EF6 之前的时代,如果需要从数据库中生成代码,是可以直接在界面上操作的,而到了EF Core的时代,操作方式又有更简便的方式了,我们只需要记住以下这条指令。 Scaffold-DbContext "Server=服务器地址;Database=数据库名;uid=用户名;pwd=密码" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 颜色:连接字符串 颜色:表示该数据源是sqlserver数据库,如果是mysql则用Pomelo.Entit
码农阿宇
2018/04/18
9870
EF Core 3.1 入门视频-06 修改和删除
http://mpvideo.qpic.cn/0b78wmaacaaa24ajzqdojvpvbm6dagzqaaia.f10002.mp4?dis_k=c1adbc7d5c171092c6e3d50
宿春磊Charles
2022/03/29
1890
EF Core 3.1 入门视频-05 添加和查询
http://mpvideo.qpic.cn/0bf2huaogaaaoqah5qdov5pvapod4m6qbyya.f10002.mp4?dis_k=a09094c6d6a06ebd388dee7
宿春磊Charles
2022/03/29
3080
EF Core 3.1 入门视频-01 准备工作
http://mpvideo.qpic.cn/0b78wiaacaaa7aaj2r3okfpvbmwdagzaaaia.f10002.mp4?dis_k=73040d3a12db90b7cecc835
宿春磊Charles
2022/03/29
2510
EF Core 3.1 入门视频-10 执行原生SQL
http://mpvideo.qpic.cn/0bf2qmbh6aacleaoeg3mgvpvfa6dp6bqe7ya.f10002.mp4?dis_k=361051a3b4994e09e862108
宿春磊Charles
2022/03/29
5930
EF Core 3.1 入门视频-08 加载关系数据
http://mpvideo.qpic.cn/0bf2hyc4iaafuiafshtlrzpvkpwdyq7alraa.f10002.mp4?dis_k=e10af43658bd2b923188b3d
宿春磊Charles
2022/03/29
3050
EF Core 3.1 入门视频-02 创建数据库
http://mpvideo.qpic.cn/0b7854aacaaay4ajzgdojvpvb36dahxqaaia.f10002.mp4?dis_k=8a3835d77347ec6cd69f594
宿春磊Charles
2022/03/29
3550
EF Core 3.1 入门视频-07 添加关系数据
http://mpvideo.qpic.cn/0bf2jyaacaaazqajzrtomzpvatwdafhaaaia.f10002.mp4?dis_k=96fb05c7eed54481b4a9366
宿春磊Charles
2022/03/29
2150
EF Core 3.1 入门视频-09 修改关系数据
http://mpvideo.qpic.cn/0bf2fuaogaaas4ah4olowjpvalod4mwqbyya.f10002.mp4?dis_k=d9f17a7f2f1597cc46c3462
宿春磊Charles
2022/03/29
2990
EF Core索引
索引是跨多个数据存储区的常见概念。 尽管它们在数据存储中的实现可能会有所不同,但也可用于基于列(或一组列)更高效地进行查找。
跟着阿笨一起玩NET
2020/11/10
1.6K0
EF Core3.1 CodeFirst动态自动添加表和字段的描述信息
为什么要用这个呢.. 因为EF Core3.1 CodeFirst 对于自动添加描述这块 只有少部分的数据库支持..
GuZhenYin
2021/07/16
1.6K0
EF Core3.1  CodeFirst动态自动添加表和字段的描述信息
EF Core 3.1 入门视频-04 多对多,一对一
http://mpvideo.qpic.cn/0b78wmaaaaaajaajzbtom5pvbm6daczqaaaa.f10002.mp4?dis_k=dd3ee0251919e72ac370ba3
宿春磊Charles
2022/03/29
3960
.Net Core + EF + mysql 从数据库生成实体
原文地址:https://blog.spiritling.cn/posts/daefc0a4/
SpiritLing
2020/07/20
1.7K0
EF Core 数据验证
数据验证是每个项目必须存在的,可以防止不符合系统规范的数据进入系统进而导致系统不稳定甚至崩溃。我们可以自己编写代码(包括前台和后台代码)进行验证,但是这样一方面代码量较大,另一方面有可能验证代码覆盖不完全。但是在 Entity Framework Core (以下简称 EF Core )中这些问题全可以解决。在 EF Core 中有两种验证模式,分别是内置模型验证和第三方扩展模型验证。下面我分别对这两种模式进行讲解,在讲解前我们先来创建必须的模型。
喵叔
2020/09/08
1.2K0
C# 数据操作系列 - 7. EF Core 导航属性配置
在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑。在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等。这一篇将为大家细细分析一下,如何设置这些映射。
程序员小高
2020/05/21
3.3K0
EF Core相关工具使用
首先确保本地netcore sdk安装完毕,如下是卸载tool、安装指定版本tool、更新到指定版本的tool 的命令:
郑小超.
2022/05/11
5080
EF Core相关工具使用
基于Saas主键表生成主键id
首先需要对当前的id进行拦截操作,也即使用aop的切面Aspect对切点进行拦截,在进行新增的时候进行拦截:
路行的亚洲
2021/06/24
1.8K0
EF Core 基础知识
EF Core 默认会与 ASP.NET Core的日志提供程序一起工作,只需要使用AddDbContext或AddDbContextPool添加服务即可。
拓荒者IT
2019/09/23
7900

相似问题

EF Core 3.1导航属性

30

EF Core 3.1视图导航属性

133

带有Postgres的EF Core生成负主键

21

EF Core 3.1 Fluent API

36

EF Core 3.1查询优化

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文