【问题标题】:LINQ error: "<object> has no parameterless constructor."LINQ 错误:“<object> 没有无参数构造函数。”
【发布时间】:2015-07-23 17:37:55
【问题描述】:

我有一个类方法GetMS(),定义如下,但是当调用该方法时,我收到一条错误消息,指出'SLRD' has no parameterless constructor. 我不明白为什么还要调用无参数构造函数。这里有什么问题?

public class SLR : BaseEntity
{
    // ...
    public virtual ICollection<SLRD> ChildRequests { get; set; }
}

public SLRD GetMS()
{
    return ChildRequests.First(c => c.Type == SLRTypes.MS);
}

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案1】:

    我不明白为什么还要调用无参数构造函数。

    我的猜测是您正在通过 Linq/EF 查询懒惰地填充 ChildRequests,因此在您迭代它们之前不会创建对象(这是作为 First 方法的一部分完成的)。此时,EF 尝试使用不存在的无参数构造函数创建实例。

    【讨论】:

    • 谢谢,感谢您解释为什么需要它!
    • 这是正确的答案。我在启用延迟加载时遇到了这个问题。解释它发生的原因使编码人员能够根据自己的应用程序进行正确的修复,而不是做一些不需要的事情。
    【解决方案2】:

    你得到的错误很清楚。您错过了定义无参数构造函数。

    public class SLR : BaseEntity
    {
        public SLR() : base
        {
        }
    
        // ...
        public virtual ICollection<SLRD> ChildRequests { get; set; }
    }
    

    发生这种情况的原因是您的基类可能有一个无参数构造函数。所以你必须为派生类定义一个SLR

    【讨论】:

    • 你知道为什么吗?我很好奇。
    • 如果定义了非默认构造函数,则只需要定义无参数构造函数,问题没有说明。
    • 完美,我没有意识到我可以创建一个空的构造函数并让它仍然正常工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多