gpt4 book ai didi

c# - 将变量模型类型传递给 MVC 中的 C# 函数以简化代码

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:40 26 4
gpt4 key购买 nike

我有一堆模型更新例程,它们只随着传递的模型而变化,例如:

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):

interface IViewModel
{
int AccountId { get; }
}

class AccountViewModel : IViewModel
{
...
}

然后您可以将实现此接口(interface)的任何 View 模型传递给您的 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, .. .).

编辑:刚看到每个 View 模型都有不同的数据键(属性?),也许这是一个更好的解决方案:

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);调用。

希望这对您有所帮助。

关于c# - 将变量模型类型传递给 MVC 中的 C# 函数以简化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com