Как расширить абстрактный класс Entity в RIA Services

Я хочу добавить логическую переменную и свойство в базовый класс Entity в моем проекте служб RIA, чтобы он был доступен во всех объектах сущностей, но, похоже, не могу понять, как это сделать. Я знаю, что добавлять свойства к самим сущностям легко, используя .shared.cs и разделяемые классы, но добавление таких свойств к классу Entity с помощью аналогичных методов не работает.

Например, следующий код не работает

namespace System.ServiceModel.DomainServices.Client
{
    public abstract partial class Entity
    {
        private bool auditRequired;
        public bool AuditRequired
        {
            get { return auditRequired; }
            set { auditRequired = value; }
        }
    }
}

Все, что происходит, это то, что существующий класс Entity полностью переопределяется, а не расширяется.

Как расширить базовый класс сущностей, чтобы функциональность была доступна во всех производных классах сущностей?


person Calanus    schedule 24.12.2010    source источник


Ответы (1)


Вы не сможете добавить свойство в класс Entity. Этот класс уже скомпилирован и не может быть изменен (частичные классы работают только потому, что у вас есть исходный код класса в вашем решении, и код может быть объединен во время компиляции).

Одним из вариантов может быть создание класса, который наследуется от Entity, затем добавление вашего свойства в этот класс и наследование ваших объектов от вашего пользовательского класса вместо Entity. Однако это может быть непрактично для использования с дизайнерами.

public class MyEntityBase : Entity
{
    private bool auditRequired;
    public bool AuditRequired
    {
        get { return auditRequired; }
        set { auditRequired = value; }
    }
}

public class Entity1 : MyEntityBase
{

}
person Xavier Poinas    schedule 24.12.2010
comment
О, я думал, что это может быть что-то вроде этого! Спасибо за совет, я подумаю над тем, чтобы сделать это. - person Calanus; 24.12.2010