【问题标题】:Does [Key] attribute force C# to compare entities by decorated properties?[Key] 属性是否强制 C# 按修饰属性比较实体?
【发布时间】:2021-06-21 06:16:47
【问题描述】:
    public class Potato
    {

        int SomeID { get; set; }
        DataTable Potable { get; set; }
        [Key]
        string PotatoKey { get; set; }
        object GrimReaper { get; set; }
    }

当比较 2 个土豆时,有一个 [Key] 属性是否告诉 C# 为了进行比较只需要比较 PotatoKey?还是我还需要明确告诉比较 PotatoKeys?

【问题讨论】:

  • 如果您的意思类似于potatoA < potatoB,那么您需要实现IComparable<Potato>,然后您可以调用potatoA.CompareTo(potatoB)。或者,您可以在类中重载比较运算符(<<=>>=),然后使用 potatoA < potatoB
  • “比较”是什么意思?应用== 运算符?
  • 不幸的是,如果您想添加自定义等号或 == != ,... 运算符,您必须完全手动完成。 C# 方面不支持。我找到的最好的是“Fody.Equals”,它可以在这里帮助你github.com/Fody/Equals。也许记录可以帮助你作为有值类型比较,但它们比较所有属性,这也是不可更改的(很容易)

标签: c# .net attributes comparison primary-key


【解决方案1】:

[Key] 自己实际上什么都不做;它需要其他代码(通常是库代码)来检查它是否存在,并推断出一些特殊含义——大概是在被某些 ORM 处理时“将其视为主键”。它不会改变 C# 编译器或 .NET 运行时的任何部分除了那些明确检查它的部分。例如,它不会改变对象相等或比较的工作方式。只有极少数属性直接影响代码的行为方式。

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    相关资源
    最近更新 更多