尝试实现基于an article by Chris Pratt的通用存储库,该存储库使用object作为Id(PK)。

一切都很好,直到我尝试用ExpressMapper对这些对象之一进行.Map()为止。

下面有更多代码。但从本质上讲,当我尝试执行此操作时:

var dataModel = postedModel.Map(new ExampleDataModel());

它给了我:



当我将IdExampleDataModel属性更改为stringint时,它可以正常工作。

我已经在Google周围搜索了。我看不到任何明显的东西,但是我有点不尽如人意。我想知道:
  • 是什么原因造成的?
  • 我可以以某种方式解决它吗?

  • 如果可能的话,我想继续使用对象PK和ExpressMapper,因为它们都适合我的项目。
    public interface IDataModel
    {
        object Id { get; }
    }
    
    public interface IDataModel<PKT> : IDataModel
    {
        new PKT Id { get; set; }
    }
    
    public abstract class DataModel<PKT> : IDataModel<PKT>
    {
        public PKT Id { get; set; }
        object IDataModel.Id
        {
            get { return this.Id; }
        }
    }
    
    
    
    public class ExampleDataModel :
        DataModel<string>,
        IDataModel<string>
    {
         public virtual string SomeProperty{ get; set; }
    
        // etc.
    }
    

    最佳答案

    在执行new ExampleDataModel()时,您尝试使用无参数构造函数来初始化ExampleDataModel实例,但是在您的类中没有一个,这就是为什么要获取
    No parameterless constructor defined for this object.
    您应该添加一个无参数的构造函数,
    看起来像这样

    ExampleDataModel()
    {
    //init object
    }
    

    尽管我不确定您想如何初始化对象,所以我不确定您的构造函数应该如何。

    10-05 22:41
    查看更多