Entity Framework 4 не поддерживает Curious-Recurring Generic Pattern? - PullRequest
1 голос
/ 22 июня 2010

кажется, что если я использую пользовательский класс в качестве базы сущности, ObjectContext.CreateObjectSet завершится с ошибкой stackoverflow

код:

// This is generated by EF4 and i modify it to my custom class
public partial class EntityA : GClass<EntityA>
{
    ......
}

public partial class TestEntities : ObjectContext
{
    public ObjectSet<EntityA> EntityAs
    {
        get
        {
            if ((_EntityAs == null))
            {
                // here will throw stackoverflow exception
                _EntityAs = base.CreateObjectSet<EntityA>("EntityAs");
            }
            return _EntityAs;
        }
    }
    private ObjectSet<EntityA> _EntityAs;
}


// This is custom class
public partial class EntityA
{
}

// This is my custom base class
public class GClass<T> : EntityObject where T : class
{
    public virtual string GetStr()
    {
        return "GClass";
    }
}

1 Ответ

0 голосов
/ 22 июня 2010

Я рекомендую создать интерфейс для ваших объектов, а не менять базовый класс. Сгенерированный код не должен быть изменен.

Обновление: Из-за необъяснимых понижений голосов я добавляю приведенный ниже код, который точно объясняет, что я имею в виду:

// Generated by EF4
public partial class EntityA : EntityObject
{
    ...
}

// Interface defined in another file
public interface IGClass<T> where T : IGClass<T>
{
    string GetStr();
}

// Automatically generated by T4 template
public partial class EntityA : IGClass<EntityA>
{
    public virtual string GetStr()
    {
        return "GClass";
    }
}

Полученный код использует CRGP, но делает это через интерфейс вместо базового класса.

Более подробная информация о шаблонах T4 здесь .

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