尝试实现基于an article by Chris Pratt的通用存储库,该存储库使用object
作为Id
(PK)。
一切都很好,直到我尝试用ExpressMapper对这些对象之一进行.Map()
为止。
下面有更多代码。但从本质上讲,当我尝试执行此操作时:
var dataModel = postedModel.Map(new ExampleDataModel());
它给了我:
当我将
Id
的ExampleDataModel
属性更改为string
或int
时,它可以正常工作。我已经在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
}
尽管我不确定您想如何初始化对象,所以我不确定您的构造函数应该如何。