【问题标题】:Why do we need the backing fields in EF Core?为什么我们需要 EF Core 中的支持字段?
【发布时间】:2020-03-25 09:19:43
【问题描述】:

为什么我们需要 EF Core 中的支持字段?

为什么有人在处理实体时要使用字段而不是属性?我想不出这样的情况。这可能意味着我不了解这些字段,或者我遗漏了一些关于这些字段的内容,因为我认为我可以完成任何可以对具有属性的字段进行的操作。

我正在通过here 上的教程学习 EF Core。

【问题讨论】:

  • 您参考了哪些文档?
  • @GertArnold,我更新了我的问题。谢谢。
  • 那只显示一个可选的配置方法。你不必使用它。它只允许 EF 在实体化实体时使用字段访问。

标签: properties entity-framework-core field entities backing-field


【解决方案1】:

属性不存储任何内容。它们是一对 set 和 get 方法。你必须有一个支持字段才能让他们存储一些东西。

public class Data
{
    private int _id; // Backing field used by property to store the value.

    // Property whose name is used by EF Core to map to a column name.
    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    ... more properties
}

但您可以通过使用自动属性来简化此代码

public class Data
{
    // Auto-implemented property. Backing field and implementation are hidden.
    public int Id { get; set; }

    ... more properties
}

第二个代码 sn-p 与第一个代码完全相同。


如果可以从属性名称推断出名称,则 EF Core 更喜欢支持字段而不是属性。 Conventions 说:

按照惯例,将发现以下字段作为给定属性的支持字段(按优先顺序列出)。仅发现模型中包含的属性的字段。有关模型中包含哪些属性的详细信息,请参阅Including & Excluding Properties

  • _
  • _
  • m_
  • m_

【讨论】:

  • 感谢您的回答。那么,为什么有人想直接使用支持字段而不是自动属性呢?
  • 参见后面添加的参考。所以并不是有人会喜欢它。 EF 喜欢使用支持字段,您可以在约定失败时帮助 EF 找到它们。
  • @GertArnold,我学到了一些东西!谢谢。更正了我的答案。
猜你喜欢
  • 2021-06-08
  • 2022-01-08
  • 2019-06-09
  • 1970-01-01
  • 2012-04-02
  • 2014-01-21
  • 2014-06-04
  • 1970-01-01
  • 2014-05-29
相关资源
最近更新 更多