我目前在我的控制器中有以下代码。 这里看起来有点混乱,我宁愿将JQuery重构为一个类。 我将在网站的许多地方需要这些数据库信息,不重复使用查询似乎很遗憾。
是否可以从课堂上做到这一点?我不确定返回它的对象,就像代码在类中一样。
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,
});
答案 0 :(得分:0)
首先,你想要让你的哑存储POCO。让我们称之为。
public class DumbStoragePoco {
public string FirstName {get;set;}
public string Surname {get;set;}
public string Email {get;set;}
}
现在我们继续为此创建一个Data-Access-Layer类。
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中提取一个接口,并将其与依赖注入和控制容器的反转一起使用,以创建进一步的抽象,使得所有Controller所做的是接受其构造函数中的正确接口,并对其进行调用以获得预期的返回类型。