Совместное использование модели данных между Silverlight и клиентом WPF

Я использую EntityFramework Code First 5 и у меня есть модель данных.

Пример:

[Table("Contract"]]
public class Contract
{
    ...

    [ForeignKey("SomeKey")]
    //[Include]
    public virtual BusinessPartner BP
    {
    ...
    }
}

Модель данных в настоящее время используется клиентом WPF и прекрасно работает. Сейчас я пишу клиент Silverlight и использую ту же модель. Для доступа к базе данных я использую RIA Services. Он отлично работал в Silverlight, пока мне не пришлось добавить некоторые аннотации RIA, такие как [Включить] (это прокомментировано в приведенном выше примере).

Проблема в том, что мы используем.NET 4 Client Profile в нашей модели данных, и мы не можем его изменить. Но аннотации RIA находятся в пространстве имен System.ServiceModel.DomainServices.Server, для которого требуется.NET 4 или.NET 4.5.

Поэтому, если я добавлю аннотацию RIA [Include], модель больше не будет компилироваться.

Есть ли способ использовать атрибуты аннотации RIA с помощью.NET 4 Client Profile, чтобы я мог использовать одну и ту же модель данных в клиенте WPF и Silverlight?

Я прочитал кое-что об определении этих атрибутов RIA в файле XML, но я не могу найти пример..

Спасибо

2 ответа

Я нашел решение своей проблемы. Я использовал FluentMetadata, Fluent API для служб RIA WCF, который позволял мне определять аннотации в другой сборке. Это было как раз то, что мне было нужно. Более подробную информацию о FluentMetadata можно найти по следующей ссылке

Если он работал для WPF и прекрасно работает в Silverlight, единственное, что вам нужно, - это создать собственный фиктивный атрибут для вашего приложения WPF, который будет имитировать IncludeAttribute из RIA для его компиляции. Для этого вам нужно поместить атрибут в то же пространство имен, что и в RIA.

namespace System.ServiceModel.DomainServices.Server 
{
    // Just put this into your WPF app :)
    [AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, AllowMultiple = true, Inherited = true)]
    public class IncludeAttribute : Attribute {}
}
Другие вопросы по тегам