0

我正在开发一项服务来从许多远程数据库中收集数据并将其编译到主数据库中。我有一个接口,其中包含两个数据库之间通用的数据。该接口还充当我的模型和视图模型之间的链接。

我想从 RemoteDatabase 的实例中获取数据并将所有这些数据放入 MasterDatabase 的实例中。

public interface IInterface
{
    //Common interface properties in both databases
    long PK { get; set; }
    Nullable<long> RUN_ID { get; set; }
    string Recipe_Name { get; set; }
    string Notes { get; set; }
    //Lots more properties from a database
}

class RemoteDatabase : IInterface
{
    //Common interface properties in both databases
    public long PK { get; set; }
    public Nullable<long> RUN_ID { get; set; }
    public string Recipe_Name { get; set; }
    public string Notes { get; set; }
    //Lots more properties from a database
}

class MasterDatabase : IInterface
{
    //Additional properties that Remote Database doesn't have
    public int locationFK { get; set; }

    //Common interface properties from database
    public long PK { get; set; }
    public Nullable<long> RUN_ID { get; set; }
    public string Recipe_Name { get; set; }
    public string Notes { get; set; }
    //Lots more properties from a database

    public MasterDatabase(IInterface iInterface)
    {
        var interfaceProps = typeof(IInterface).GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (PropertyInfo p in interfaceProps)
        {
            p.Name;
        }
    }
}

我试图只投射对象,但这提供了一个无效的投射异常,我理解(虽然他们有共同的祖先,但这并不意味着他们可以投射 dog==animal,fish==animal,但是 dog!=fish,但我想要的是获得 IAnimal 中定义的公共属性)。

由于我无法转换,我想使用反射,这样如果接口更新,那么 MasterDatabase 类中的所有新对象都会自动更新。我使用反射从接口获取所有属性,但现在如何使用 propertyInfo.name 来获取 MasterDatabase 类中的值。

也许我遗漏了一些明显的东西,或者有更好的方法来做到这一点。我感谢任何帮助或建议。

先感谢您。

4

1 回答 1

1

您需要调用SetValuePropertyInfo 对象,将this其用作目标。您传递的值应该使用GetValue对构造函数参数的相应调用来检索:

foreach (PropertyInfo p in interfaceProps)
{
    p.SetValue(this, p.GetValue(iInterface, null), null);
}
于 2013-10-16T03:31:39.517 回答