asp.net mvc 3-将可变模型类型传递给mvc中的C#函数以简化代码
本文关键字:mvc 中的 函数 代码 net 类型 模型 asp | 更新日期: 2023-09-27 17:59:27
我有一堆模型更新例程,它们只会随着传递的模型而变化,例如:
public void UpdateAccount(AccountViewModel model)
{
var _currentData = (from data in db.Accounts
where data.AccountId == model.AccountId
select data).Single();
Mapper.Map(model, _currentData);
Save();
}
我有一堆类似的函数,其中传递的模型随着数据键的变化而变化。这可以变得更通用吗?
一个选项是让每个模型实现相同的接口:
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);
调用。
希望这能有所帮助。