【问题标题】:Select record using md5 hash ADO.Net EF使用 md5 哈希 ADO.Net EF 选择记录
【发布时间】:2014-08-28 22:47:15
【问题描述】:

我在数据库中有纯文本记录。 从外部来源我得到字符串值的 md5 哈希。

Entities DB = ...
DB.SomeObjects.FirstOrDefault(p => p.PlainTextValue == md5HashedValue);

如何将此 PlainTextValue 转换为 md5?

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    这是一个糟糕的实现。要使用它,您需要从 DB 中读取所有行,在应用程序端计算其 MD5,并将它们与提供的值进行比较。每次执行此查询时都会发生这种情况。这是因为数据库无法进行该计算,因此无法将查询转换为 SQL 查询。 (如果不够清楚:您只能从数据库中读取所有文本,将它们存储在 List 或某处,然后在应用程序端计算所有哈希......每次)

    理想的解决方案是在数据库、新列或相关表上计算 MD5,以避免重复计算,并且必须读取所有文本并将其传输到应用程序。 (然后,每当文本发生变化或插入新文本时,计算哈希值,并将其存储在数据库中。

    要使用 C# 计算 MD5,您可以查看 this SO Q&A

    【讨论】:

    • 抛开优化和性能考虑,答案是肯定的,您应该更新这个已接受的“答案”,以在 EF(或 Linq to Entity)语句的上下文中实际包含 C# MD5 sn-p ,而不是简单地引用另一个 SO 答案..
    • @BrettCaswell 很抱歉不同意,但 1)“如何将此 PlainTextValue 转换为 md5?”的答案不能是“是”,还是我错过了一些问题? 2) 不能对 L2E 查询进行 MD5 计算:不能转换为 SQL,因此会失败,抛出异常。您必须具体化查询并离开 L2E 域才能计算散列。 3)您应该知道“仅引用 SO 问题”是一个好主意,因为答案在 SO 中是自包含的。只有当您链接到可能会消失的外部资源时,才需要复制信息。
    • 4) 最后,我通常引用“过早的优化是万恶之源”。但是,在这种情况下,重复如此昂贵的操作和 MD5 哈希计算简直是疯了。我通常不会简单地提出问题,还会添加一些相关的建议,不管你信不信,这些建议会变得非常有用,让 OP 睁大眼睛。
    猜你喜欢
    • 2020-12-08
    • 2014-11-05
    • 2012-08-17
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2019-10-10
    • 2013-02-12
    相关资源
    最近更新 更多