Один из вариантов - заставить каждую вашу модель реализовывать один и тот же интерфейс:
interface IViewModel
{
int AccountId { get; }
}
class AccountViewModel : IViewModel
{
...
}
И затем вы можете передать любую модель представления, реализующую этот интерфейс, вашему UpdateAccount
методу:
public void UpdateAccount(IViewModel model)
{
var _currentData = (from data in db.Accounts
where data.AccountId == model.AccountId
select data).Single();
Mapper.Map(model, _currentData);
Save();
}
Или вы можете определить это как:
public void UpdateAccount<TViewModel>(TViewModel model)
where TViewModel: IViewModel { ... }
Однако это означает, что вам также придется изменить определение метода Mapper.Map(...)
, чтобы принять новый интерфейс: Mapper.Map(IViewModel model, ...)
.
Редактировать : Просто видел, что каждая модель представления имеет различный ключ данных (свойство?), Возможно, это лучшее решение:
public void UpdateAccount<T>(T model, Func<T, int> dataKeySelector)
{
var _currentData = (from data in db.Accounts
where data.AccountID == dataKeySelector(model)
select data).Single();
Mapper.Map(model, _currentData);
Save();
}
Который можно назвать UpdateAccount(model, m => m.AccountID);
.
Надеюсь, это поможет.