Наиболее близким решением для вашего подхода является использование класса-оболочки с конструктором, который извлекает экземпляр Анкеты из БД. Я ненавижу такой подход (предпочтение отдается DAO , точно так же, как вышеупомянутый репозиторий).
public class QuestionnaireWrapper: Questionnaire {
private Questionnaire _q;
public QuestionnaireWrapper(int id)
{
_q = (from q in db.Questionnaires
where q.Id == id
select q).SingleOrDefault();
}
public new string Name
{
get { return _q.Name; }
set { _q.Name = value; }
}
[Other overrides, all of them]
}
То, что вы пытались достичь (this = ...
), не возможно, потому что нарушает основные принципы программирования. Я использовал такой подход только один раз, когда мне нужно было создать переносимые обертки (: MarshalByRefObject
) для объектов, которые не были удалены. И поверьте мне, это не чистый подход. Пожалуйста, не отрицайте меня за плохой код, когда я ясно говорю это; -)
Наблюдение №. 2: прочитав вторую часть вашего кода, я обнаружил, что вы были близки. Вот почему статические методы для! :)
public static Questionnaire Get(int id)
{
return (from q in db.Questionnaires
where q.Id == id
select q).SingleOrDefault();
}
тогда
Questionnaire qs = Questionnaire.Get(1);