2012-08-09 47 views
2

我所有的实体将具有以下属性:替代界面W/RIA服务

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'文件,并在同一个共享文件(或其他共享文件),把类的部分类定义实现界面。这就是所需要的。

回答

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

但可以用RIA服务这项工作?我不断收到错误,然后我发现:http://forums.silverlight.net/t/173718.aspx/1这似乎说这是不可能的... – nosirrahcd 2012-08-09 18:34:54

+1

@ user468341尝试保存您的部分类(实现你的界面)放在名为XXX.shared.cs的文件中(例如上面例子中的User.shared.cs)。 RIA服务使用此模式自动将C#代码从服务器端共享到客户端(代码复制到客户端代理中)。 – ken2k 2012-08-09 21:11:58

+0

@ ken2k如果你这样做,它几乎可以工作;它似乎没有通过电线将属性发送回服务器端。我接近完成这项工作。 – DaleyKD 2012-08-21 15:01:26