Почему отображение объекта PK нарушает ExpressMapper?
Попытка реализовать общий репозиторий на основе статьи Криса Пратта, которая использует object
как Id
(PK).
Все хорошо, пока я не попытался .Map()
одним из этих объектов с ExpressMapper.
Дополнительный код ниже. Но по существу, когда я пытаюсь это сделать:
var dataModel = postedModel.Map(new ExampleDataModel());
Это дает мне:
Нет конструктора без параметров для этого объекта.
Когда я изменяю свойство Id
ExampleDataModel
на string
или int
, он отлично работает.
Я искал googled. Я не вижу ничего очевидного, но я немного из глубины. Я хотел бы знать:
Я хотел бы продолжать использовать объект 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.
}
Ответы
Ответ 1
когда вы выполняете new ExampleDataModel()
, вы пытаетесь инициализировать экземпляр ExampleDataModel
с помощью конструктора без параметров, но, глядя на ваш класс, у вас его нет, почему вы получаете
No parameterless constructor defined for this object.
Вы должны добавить один конструктор без параметров,
который выглядит следующим образом
ExampleDataModel()
{
//init object
}
хотя я не уверен, как вы хотите запустить свой объект, поэтому я не уверен, каким должен быть ваш конструктор.
Ответ 2
Измените класс ExampleDataModel, я не вижу свойство Id, Как вы возвращаете this.Id
для этого нет никакой ссылки, также вам нужно свойство идентификатора строки, которое IDataModel<string>
заставляет вас я надеюсь, что эта помощь:
public class ExampleDataModel : IDataModel, IDataModel<string>
{
public string Id { get; set; }
object IDataModel.Id
{
get { return this.Id; }
}
public virtual string SomeProperty { get; set; }
// etc.
}