[英]Entity Framework 4 association with non-key columns/fields and different columns/field names
[英]Generating a unique random non-key value in Entity Framework/SQL
我有一个预订应用程序,客户将在其中创建预订。 我不希望他们必须创建一个帐户并登录,所以他们将使用确认代码(如航空公司使用的)和信用卡的最后 4 个(再次,如航空公司)修改/查看他们的预订。 我的预订 class 已经有一个主键,一个 GUID,但是,我不想把它给客户,我想要一些更好看的东西,比如 6-8 位字母代码。
我正在使用 Entity Framework 和 C#/ASP.NET Core,虽然我可以在我的代码中生成值,但请检查 DB (MSSQL) 是否未使用该值,然后如果它是唯一的则保留,我宁愿如果可以的话,只做一次手术。 做这样的事情是让数据库生成值的公认方式还是有更多的 EF 方式来做这件事?
类似于双因素 (TOTP) 代码,但基于您的 GUID 而不是时间戳?
// userData should be populated with whatever immutable user data you want
// applicationSecret should be a constant
public string ComputeCode(byte[] userData, byte[] applicationSecret, int length)
{
using var hashAlgorithm = new HMACSHA256(applicationSecret);
var hash = hashAlgorithm.ComputeHash(userData);
return BitConverter.ToString(hash).Replace("-", "").Substring(0, length);
}
我无法谈论您问题中与 EF 相关的方面,但我最近不得不想出一种方法来为个人项目生成唯一的、用户友好的 ID。
我最终确定的是以下内容:
该算法产生类似于以下的可逆映射:
1 <-> "4zm5cna"
2 <-> "5ytgepe"
3 <-> "e94rs4e"
etc.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.