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如果这样做,它几乎可以工作;它似乎没有通过线路将属性发送回服务器端。我差一点就要完成这项工作了。