C# 重构绑定到类的模型控制器代码
我目前在控制器中有以下代码。 这里看起来有点混乱,我宁愿将JQuery重构为一个类。 我将需要这个数据库信息在网站内的许多地方,这似乎是一个遗憾,没有重复使用查询 可以在课堂上这样做吗?我不确定返回它的对象是什么,就像代码在类中一样C# 重构绑定到类的模型控制器代码,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我目前在控制器中有以下代码。 这里看起来有点混乱,我宁愿将JQuery重构为一个类。 我将需要这个数据库信息在网站内的许多地方,这似乎是一个遗憾,没有重复使用查询 可以在课堂上这样做吗?我不确定返回它的对象是什么,就像代码在类中一样 var profileViewModel = (from da in db.table1 from ra in db.table2.Where(_ra => da.someID == _ra.so
var profileViewModel = (from da in db.table1
from ra in db.table2.Where(_ra => da.someID == _ra.someID).DefaultIfEmpty()
from rg in db.table3.Where(_rg => da.someID2 == _rg.someID2).DefaultIfEmpty()
from re in db.table4.Where(_re => da.someID3 == _re.someID3).DefaultIfEmpty()
where da.UserName == model.mUserName
select new ManageUserAccountsViewModel
{
FirstName = ra.FirstName,
Surname = ra.Surname,
Email = da.UserName,
});
首先,您希望使您的哑存储成为POCO。就这么说吧
public class DumbStoragePoco {
public string FirstName {get;set;}
public string Surname {get;set;}
public string Email {get;set;}
}
现在,我们继续为它创建一个数据访问层类
public class UserAccountData {
private readonly DbContext _context;
public UserAcctionData(DbContext context) { _context = context; }
public Get(string username) {
return from da in _context.table1
from ra in _context.table2.Where(_ra => da.someID == _ra.someID).DefaultIfEmpty()
from rg in _context.table3.Where(_rg => da.someID2 == _rg.someID2).DefaultIfEmpty()
from re in _context.table4.Where(_re => da.someID3 == _re.someID3).DefaultIfEmpty()
where da.UserName == username
select new DumbStoragePoco
{
FirstName = ra.FirstName,
Surname = ra.Surname,
Email = da.UserName,
});
}
现在,您可以在控制器中实例化UserAccountData,并使用用户名调用Get方法来获取DumbStoragePoco的实例,然后可以将其传递到您可能需要的任何ViewModel中。如果希望进一步抽象,可以围绕数据访问调用实现存储库模式。您可以从UserAccountData中提取接口,并将其与依赖项注入和控制容器反转一起使用,以创建进一步的抽象,使控制器所做的只是在其构造函数中接受适当的接口,并针对预期的返回类型对其进行调用。在哪个构造函数中?如果您想在多个控制器中生成
var profileViewModel
,可以在BaseController中创建一个受保护的方法,该方法返回sorry,我是说controller,我现在就编辑帖子