【问题标题】:How should you set a dependent property that's related to a many-to-one field in EF Core?您应该如何设置与 EF Core 中的多对一字段相关的依赖属性?
【发布时间】:2021-09-03 23:50:38
【问题描述】:

我制作了这个基本示例来说明我在说什么。基本上我想在引擎添加到汽车时自动设置“HasEngine”属性。我相信这样做的方法是覆盖 Car 类的 Engine 或 EngineId 属性的设置器,但实际上应该在哪一个中完成呢?或者有没有更好的方法来管理这种“依赖”属性?

public class Car
{
    public bool HasEngine { get; private set; }

    public int? EngineId { get; set; }
    public Engine Engine { get; set; }
}

public class Engine
{
    public int EngineId { get; set; }

    public IList<Car> Cars { get; set; }
}

就 EF Core 而言,我确实想将 HasEngine 属性存储在数据库中,我只是不想每次都手动设置它

【问题讨论】:

  • 可能是这样的? public bool HasEngine =&gt; EngineId.HasValue; 为什么要将此值存储到 db 中?
  • 但在这种情况下,它不会存储在数据库中,对吧?我的示例也是实际用例的简化版本——实际上我有几个可以设置依赖属性的属性。从技术上讲,我仍然可以使用 if 语句(或仅将其设为方法)来执行您在 getter 上建议的操作。至于我为什么要将它存储在数据库中,它是为了报告目的(在应用程序内外)
  • 好的,那么您必须修改 Car#Engine 的设置器。但我仍然建议您尝试解决您的要求,例如没有这个额外的 db 列的报告。编写模仿您想要的行为的 SQL 非常容易。做你想做的事,通常是应用程序棺材里的第一批钉子之一。 BR
  • 是的。我想我认为这会更好的另一个原因是因为在大多数情况下属性只会设置一次,所以从逻辑上讲,当设置(比如说)5个属性之一而不是评估时,设置 HasEngine 是有意义的每次访问 HasEngine 时最多 5 个属性。这真的不重要吗?
  • 好的设计应该是最重要的。当遇到性能问题时,再进行优化。 BR

标签: c# .net-core entity-framework-core


【解决方案1】:

如果您需要在没有 EF 模型的情况下完成报告中的计算值,您可以将 HasEngine 设置为数据库中的计算属性和 EF 中的只读属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-25
    • 2013-07-19
    • 1970-01-01
    • 2019-11-11
    • 2020-07-12
    • 2022-12-04
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多