Желание переопределить то, что возвращается в WCF для данных EntityType - PullRequest
1 голос
/ 04 сентября 2011

В моей модели определена сущность с именем SessionsOverview. Я выставляю его через службу WCF с кодом, подобным следующему:

public static void InitializeService(DataServiceConfiguration config)
{
    // Examples:
    config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
    config.SetServiceOperationAccessRule("*", ServiceOperationRights.AllRead);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}

Создает группу кода в файле с именем ModelSessionView.Designer.cs

В этом коде в настоящее время есть метод с именем SessionsOverviews, который возвращает объект .net. Я хотел бы переопределить то, что возвращается на основе некоторых правил безопасности. В частности, я хочу посмотреть в моем app.config, получить параметр, и если этот параметр не является истинным, я хочу скрыть некоторые данные в этом объекте. Я мог бы просто начать обновлять этот файл, но это кажется неправильным. Есть ясное место, где я должен добавить логику, подобную этой?

Спасибо

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    public ObjectSet<SessionsOverview> SessionsOverviews
    {
        get
        {
            if ((_SessionsOverviews == null))
            {
                _SessionsOverviews = 
                  base.CreateObjectSet<SessionsOverview>("SessionsOverviews");
            }
            return _SessionsOverviews;
        }
    }

1 Ответ

0 голосов
/ 21 декабря 2011

Вы пытались использовать QueryInterceptor?

Они указываются в классе обслуживания и возвращают выражение, которое вы можете написать самостоятельно.

Простой пример определен ниже:

[QueryInterceptor("SessionsOverviews")]
public Expression<Func<SessionsOverview, bool>> SessionsOverviewFilter()
{
    var configValue = readfromconfig;

    if (configValue == "something")
    {
        return (session) => session.thePropertyToFilteron == configValue;
    }

    return (session) => true;
}

Дополнительно вы также можете указать ChangeInterceptors.

Подробнее см. В следующей статье

http://msdn.microsoft.com/en-us/library/dd744842.aspx

...