【问题标题】:Coverting Guid to string将 Guid 转换为字符串
【发布时间】:2013-03-27 13:03:16
【问题描述】:

我正在创建一个应用程序,我想尝试使用 GUID。我首先使用实体​​框架代码和 LINQ,所以我认为最简单的方法是使用

string guid = Guid.NewGuid().ToString();
var acc = new v_Account();   
acc.v_AcctGuid = guid;

然后将我的 GUID 作为类型字符串存储在我的数据库中。这是一个不好的做法吗? GUID 真的只是一个全局唯一的随机生成的字符串吗?

我很确定它会起作用,但我只是不想面对未来的问题或这样做会造成漏洞。

【问题讨论】:

  • stackoverflow.com/questions/467271/… ...'Guid 有多随机'? ...尽管如此,您为什么不为其 AccountNumber 设置一个递增的整数...为什么它需要是一个 Guid?
  • 为什么要将 GUID 值转换为字符串而不是直接使用它们,即将v_AcctGuid 属性定义为Guid 类型?
  • 我建议阅读 GUID 也希望你不会将其用作潜在的 Primary Key Integer values are much quicker when Indexing off of than Strings GUIDS 据说是 Unique 我不认为你甚至有时间测试 GUID 是否会重复自身的准确性...我建议您在投入过多之前进行更多研究Wasted Effort
  • GUID 实际上是一个 16 字节的数组。它只是表示为一个十六进制字符串并分成几部分以使其更易于人类使用。但归根结底,它只有 16 个字节,最好将其存储为字节数组而不是字符串,因为字节数组将占用一半的空间。 MS SQL Server 实际上有一个 GUID 列类型,如果你正在使用它的话。
  • 您并没有说您将如何处理 GUID,因此我们无法告诉您它是否危险。 GUID 只是一段数据。每个人的猜测是您想将它们用作主键的唯一值;这将是对 GUID 的错误使用。将您的数据库设施用于身份字段。如果您想将它们用于其他用途,请解释一下。

标签: c# linq entity-framework ef-code-first guid


【解决方案1】:

GUID 作为uniqueidentifier 类型直接映射到MSSQL 数据库。所以不需要字符串化。

直接使用即可:

acc.v_AcctGuid = Guid.NewGuid();

假设:

public class Account
{
    public Guid v_AcctGuid { get; set; }
}

【讨论】:

  • 如果他不使用MSSQL怎么办?如果他使用的数据库不支持 GUID 怎么办?
  • @dutzu 这就是我在回答中提到数据库的原因。此外,大多数使用 EF 的人都在使用 MSSQL。
  • dutzu 与Sql Server 相同,这就像问他使用的数据库不支持string 怎么办... Dutzu 这里有一些好刷子阅读以回答您的问题/ cmets dailycoding.com/Posts/…
【解决方案2】:

如果您的目标数据库不支持 GUID(例如 SQLite),则可以将其存储为字符串,然后将它们作为 GUID 公开给业务层,在属性的 getter 和 setter 上进行必要的转换屏蔽实体的字符串属性的 GUID 类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2013-07-30
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多