[Key] 特性是否强制 C# 按修饰属性比较实体?

Does [Key] attribute force C# to compare entities by decorated properties?

提问人:Nick Farsi 提问时间:6/21/2021 更新时间:6/21/2021 访问量:64

问:

    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?

C# .NET 属性 比较 主键

评论

0赞 ProgrammingLlama 6/21/2021
如果你的意思是这样的东西,那么你需要实现,那么你可以调用 .或者,可以重载类中的比较运算符 (、 、 和 ),然后使用 。potatoA < potatoBIComparable<Potato>potatoA.CompareTo(potatoB)<<=>>=potatoA < potatoB
0赞 SomeBody 6/21/2021
你说的“比较”是什么意思?应用运算符?==
0赞 Klamsi 6/21/2021
不幸的是,如果您想添加自定义等于或 == != , ...操作员,您必须完全手动完成此操作。没有来自 C# 端的支持。我发现的最好的是“Fody.Equals”,它可以帮助您 github.com/Fody/Equals。也许记录可以让你成为具有值类型的比较,但它们比较了所有属性,这也不是可更改的(容易)

答:

4赞 Marc Gravell 6/21/2021 #1

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