假设我有ViewModel
public class TestViewModel
{
public string Description { get; set; }
public string Link { get; set; }
}
然后在我的控制器中
var model = new TestViewModel();
var obj = _uow.CallDB(); //call database
model.Description = obj.Description;
model.Link = obj.Link;
return View(model);
我发现我最终一遍又一遍地使用相同的代码,尤其是当在许多页面中使用TestViewModel
时。如果我做类似
ViewModel
public class TestViewModel
{
public class TestViewModel(bool init = false)
{
if (init)
{
var obj = _uow.CallDB(); //call database
Description = obj.Description;
Link = obj.Link;
}
}
public string Description { get; set; }
public string Link { get; set; }
}
控制器
var model = new TestViewModel(true);
return View(model);
我知道将数据库调用放入ViewModel
违反了该原理,但是还有什么更有效的方法,而不必一次又一次地在控制器中写入相同的内容吗?
任何帮助将不胜感激
答案 0 :(得分:1)
您可以从数据库实体到ViewModel创建一个implicit conversion。这样,您可以简单地将数据库模型分配给视图模型
void Main()
{
DBModel t = new DBModel() { Description = "Google", Link = "http://www.google.com"};
// Here the implicit conversion happens....
// a DBModel is converted in a TestViewModel
TestViewModel k = t;
Console.WriteLine(k.Description);
Console.WriteLine(k.Link);
// This means that you could write this
TestViewModel model = _uow.CallDB();
}
public class TestViewModel
{
public string Description { get; set; }
public string Link { get; set; }
public static implicit operator TestViewModel(DBModel source)
{
if (source == null) return null;
TestViewModel model = new TestViewModel()
{
Description = source.Description,
Link = source.Link
};
return model;
}
}
public class DBModel
{
public string Description { get; set; }
public string Link { get; set; }
}
当然,您可以为将来的任何需求扩展隐式转换。