Как получить класс Entity Framework наследовать базовый класс - PullRequest
3 голосов
/ 17 сентября 2010

У меня есть несколько классов, которые наследуются от абстрактного базового класса, который содержит некоторый общий код утилит.Я хочу перейти на EF для доступа к данным, но я все же хотел бы, чтобы объекты наследовали общий код в базовом классе.Классы EF уже наследуются от EntityObject, поэтому я не могу, чтобы они наследовали мой базовый класс.Какой правильный способ справиться с этим?Моя среда Net 3.5 / C #

Ответы [ 2 ]

5 голосов
/ 17 сентября 2010

Извините, если вы увидели мой предыдущий пост - я пропустил что-то важное в вашем вопросе.

Вы можете использовать частичные занятия.Сделайте так, чтобы ваш частичный класс имел внутреннее поле с экземпляром базового класса, который вы хотите, и реализует все методы и свойства (если они уже не реализованы в сущности).Если вы пытаетесь разрешить использование вашего класса сущностей, вы можете использовать public static implicit operator в своем базовом классе (или в классе частичных сущностей), чтобы разрешить преобразование без проблем.

Если у вас естьабстрактный базовый класс с именем MyBaseClass, вы можете сделать что-то вроде:

public partial class MyEntityClass
{
    private MyBaseClass _baseClass;

    private MyBaseClass BaseClass
    {
        get
        {
            if (_baseClass == null)
            {
                _baseClass = new MyBaseClass();
            }
            return _baseClass;
        }
    }

    public string BaseClassString
    {
        get
        {
            return BaseClass.BaseClassString;
        }
        set
        {
            BaseClass.BaseClassString = value;
        }
    }

    // etc.

    public static implicit operator MyBaseClass(MyEntityClass e)
    {
        return new MyBaseClass() {
            Property1 = e.Property1,
            Property2 = e.Property2 // etc.
        };
    }

    public static implicit operator MyEntityClass(MyBaseClass b)
    {
        return new MyEntityClass() {
            Property1 = b.Property1,
            Property2 = b.Property2 // etc.
        };
    }
}
2 голосов
/ 17 сентября 2010

Если вы все еще используете Visual Studio 2008, я не уверен, что вы сможете это сделать (хотя кто-то, пожалуйста, не стесняйтесь меня поправлять).

Но если выиспользуя VS2010, вы можете использовать новые параметры шаблонов T4 (даже при таргетинге на .net 3.5).Я бы сделал так, чтобы ваш базовый класс наследовал от класса EntityObject, а затем изменил шаблоны t4, используемые для генерации классов, наследуемых от вашего базового класса.

Если вы все еще в VS2008, вы, вероятно, можетепродолжая делать то же самое, вам нужно будет просто сгенерировать сгенерированные CS-файлы вручную (каждый раз, когда вы меняете модель), что будет ужасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...