Совместное использование модели данных между 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 {}
}