我的所有实体都将拥有以下属性:
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'文件中并放在同一个共享文件(或另一个共享文件)中实现接口的类的类定义。这就是全部。
答案 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();
}
}