【问题标题】:Entity Framework entity model's values empty when running constructor实体框架实体模型的值在运行构造函数时为空
【发布时间】:2016-01-29 11:26:36
【问题描述】:

我正在我的项目中实现一个 POCO,它代表我的数据库表中的一行。我想修改构造函数中的一个值。

不幸的是,这些值似乎仅在构造函数运行之后 填充,因此我无法执行所需的逻辑。这是一个错误还是设计使然?

我可能应该提到我正在使用 Code First。

public partial class CheckpointValue
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }

        [Column("saljare")]
        public int SalesAgentId { get; set; }

        [Column("volym")]
        public int Value { get; set; }

        [Column("datum")]
        public DateTime Date { get; set; }

        [Column("typ")]
        public string Type { get; set; }


        public CheckpointValue()
        {
            // Values empty... Why haven't they been populated when the constructor is run?
        }
    }

【问题讨论】:

    标签: c# .net entity-framework ef-code-first


    【解决方案1】:

    不幸的是,这些值似乎只在 构造函数已运行,因此我无法执行所需的 逻辑。这是一个错误还是设计使然?

    这是设计使然。 顺便说一句,在不提供构造函数参数的情况下,如何在构造时获取已经填充的这些属性?

    也许你试图在错误的地方实现你的逻辑。如果您正在寻找实现业务规则、域验证或谁知道什么,则应该在另一个类中完成。例如,在返回请求的对象之前,您的存储库是一个很好的地方。

    public CheckpointValue GetById(Guid id)
    {
          CheckpointValue checkpointValue = YourDbContext.CheckpointValues.Find(id);
          // Implement here what you wanted in your class constructor...
          return checkpointValue;
    }
    

    【讨论】:

    • 这就是我的怀疑。我通过在我的存储库中实现逻辑来解决它。设计上真的很烦人的“功能”......再次感谢。
    • @silkfire 我相信你根本不理解这个问题。这是设计使然,但它是对象的工作方式,不仅在 EF 中,而且在一般 C# 中。在构造时间之前你不能得到已经设置好的属性,你不能在没有初始化器或构造器的情况下设置属性............
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多