2

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

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

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

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

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

然后,我将能够在 Silverlight 端使用单个转换器来获取工具提示内容。事实上,我基本上必须为每种实体类型创建一个新的转换器,以便正确地进行转换。

有没有好的方法来做到这一点?

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

编辑:ken2k 的解决方案绝对是正确的,只需将接口放在“.shared.cs”文件中,然后在同一个共享文件(或另一个共享文件)中放置实现接口的类的部分类定义。这就是它所需要的。

4

1 回答 1

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();
    }
}
于 2012-08-09T17:10:54.947 回答