接口与Ria服务的替代方案

时间:2012-08-09 17:00:17

标签: c# silverlight entity-framework wcf-ria-services

我的所有实体都将拥有以下属性:

Employee CreatedBy { get; set; }
Employee ModifiedBy { get; set; }
DateTime CreatedDate { get; set; }
DateTime ModifiedDate { get; set; }

这适用于非常大的应用程序,实体都来自不同的数据库,因此位于不同的.edmx文件中。

大多数情况下,它们会显示在DataGrid中,我希望工具提示显示所有这些信息。 Employee是每个数据库中的一个视图。

我通常会做的是创建一个接口IEmployee,每个命名空间的Employee实体都会实现。然后我将使用上面列出的属性创建一个IToolTipEnabled接口,我会在需要的地方实现它。

然后,我可以在Silverlight端使用单个转换器来获取工具提示内容。实际上,我基本上必须为每个实体类型创建一个新的转换器,以便使投射正确。

这样做有好办法吗?

感谢您花时间阅读本文以及您可能提供的任何帮助/见解!

编辑:ken2k的解决方案肯定是正确的,只需将接口放在'.shared.cs'文件中并放在同一个共享文件(或另一个共享文件)中实现接口的类的类定义。这就是全部。

1 个答案:

答案 0 :(得分:2)

如果您的某些实体共享公共属性,并且您需要获取这些属性而无需知道实体的类型,那么接口确实是一个好主意。

例如:

public interface IDatedEntity
{
    DateTime CreationDate { get; set; }
    DateTime UpdateDate { get; set; }
}

public partial class User : IDatedEntity
{
    public DateTime CreationDate { get; set; }
    public DateTime UpdateDate { get; set; }
    ...
}
...
public partial class Customer : IDatedEntity
{
    public DateTime CreationDate { get; set; }
    public DateTime UpdateDate { get; set; }
    ...
}

因此,您可以使用单个转换器而无需了解实际实体:

// Returns the number of days since last update of an entity
public class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {       
        if (value is IDatedEntity)
        {
            return DateTime.UtcNow.Substract(((IDatedEntity)value).UpdateDate).TotalDays;
        }

        return 0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}