C# 带有Ria服务的接口替代方案

C# 带有Ria服务的接口替代方案,c#,silverlight,entity-framework,wcf-ria-services,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是每

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

Employee CreatedBy { get; set; }
Employee ModifiedBy { get; set; }
DateTime CreatedDate { get; set; }
DateTime ModifiedDate { get; set; }
这适用于非常大的应用程序,实体都来自不同的数据库,因此位于不同的
.edmx
文件中

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

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

然后,我就可以在Silverlight端为工具提示内容使用一个转换器。实际上,我必须为每个实体类型创建一个新的转换器,以便正确地进行转换

有什么好办法吗?

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


EDIT:ken2k的解决方案肯定是正确的,只需将接口放在“.shared.cs”文件中,并将实现接口的类的部分类定义放在同一个共享文件(或另一个共享文件)中即可。仅此而已。

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

例如:

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();
    }
}

但这能与Ria服务一起工作吗?我不断地得到错误,然后我发现:这似乎表明这是不可能的…@user468341尝试将您的部分类(实现您的接口)保存在一个名为XXX.shared.cs的文件中(例如上面示例中的User.shared.cs)。RIA服务使用此模式自动将C#代码从服务器端共享到客户端(代码复制到客户端代理中)。@ken2k如果这样做,它几乎可以工作;它似乎没有通过线路将属性发送回服务器端。我差一点就要完成这项工作了。