Кодирование интерфейса с использованием Entity Framework - PullRequest
3 голосов
/ 07 сентября 2010

Я пытаюсь обернуть голову вокруг Entity Framework и испытываю затруднения с пониманием того, как можно кодировать интерфейс (или, возможно, возможно ли кодирование интерфейса). Я довольно уверен в C #, но в основном из-за моей способности программировать на многих других языках, так что простите любое невежество.

Дано:

public interface IInputSource
{
    float GetCurrentValue(DateTime timestamp);
}

public class PatternSource : IInputSource
{
    …
    float GetCurrentValue(DateTime timestamp)
    {
        // generate value based on probability equation
    }
    …
}

public class TimeSeriesSource : IInputSource
{
     …
     float GetCurrentValue(DateTime timestamp)
     {
         // look up value in a key/value store
     }
     …
 }

Я хочу закодировать класс узла в интерфейс, поскольку существует 5 или 6 совершенно разных типов источников:

public class Node
{
    …
    public IInputSource Inflow { get; set;}
    …
 }

Похоже, что O / M из Entity Framework никогда не сможет разрешить конкретный класс, на который будет ссылаться Node, и, таким образом, просто не удастся кодировать интерфейс. Это действительно так?

Если нет, может ли кто-нибудь дать мне пример того, как это будет выполнено в EF 4? Я использую VS2010 & .NET 4 и исходил из менталитета, основанного на коде).

1 Ответ

1 голос
/ 09 сентября 2010

Я никогда не видел ни одного фреймворка ORM, который мог бы справиться с этим. Ваша лучшая ставка - абстрактный базовый класс, который служит заглушкой для ORM.

Если у вас есть общие функциональные возможности, которые наследуют ваши конкретные классы, абстрактный базовый класс может наследовать от желаемого суперкласса, или вы можете использовать декораторы для создания желаемой функциональности.

...