Я разрабатываю сервис для сбора данных из многих удаленных баз данных и компиляции их в главную базу данных. У меня есть интерфейс, который содержит данные, общие для двух баз данных. Интерфейс также служит связующим звеном между моей моделью и ViewModel.
Я хотел бы взять данные из экземпляра 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.
Возможно, мне не хватает чего-то очевидного, или есть способ сделать это лучше. Я ценю любую помощь или предложения.
Заранее спасибо.