我是Dapper甚至ASP.NET MVC的新手,我正在尝试编写应该是非常简单的CRUD应用程序。基本上我有两个表User和File。用户表存储有关用户的一些详细信息,当您单击详细信息时,它应显示更多详细信息以及用户将要上传的任何文件(最多可以包含10个文件)。
文件表存储文件名。如何创建模型,然后使用Dapper查看类似内容。看起来很简单,但我似乎无法弄清楚。我可以将两个模型都放在视图中,然后遍历文件模型以显示文件(如果有)。如果可以,怎么办?
这是我的详细信息控制器。
public ActionResult Details(int id)
{
Users user = new Users();
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myconn"].ConnectionString))
{
user= db.Query<Users>("SELECT * FROM Users As t LEFT JOIN Files AS f ON t.EID = f.EID WHERE t.EID=" +id, new{ id }).SingleOrDefault() ;
}
return View(trade);
}
答案 0 :(得分:0)
首先,尝试阅读有关体系结构的更多信息,首先学习如何组织代码。例如,直接从控制器调用数据库是一个坏主意。我会做这样的事情:
根据职责将所有数据库调用移动到单独的存储库类。
final String details = getItem(position);
ViewHolder viewHolder;
ViewHolder mainViewHolder = null;
if(convertView == null){
LayoutInflater inflater = LayoutInflater.from(getContext());
//...
//others codes
//...
ViewHolder.dealInfo.setText(details);//ADD THIS LINE
convertView.setTag(viewHolder);
}
创建模型以存储数据以查看详细信息
public class UsersRepository
{
public User GetUser(int id)
{
User user = new User();
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myconn"].ConnectionString))
{
user= db.Query<User>("SELECT * FROM Users where EID=@id", new{ id }).SingleOrDefault();
}
return user;
}
public List<File> GetUserFiles(int id)
{
List<File> files = new List<File>();
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myconn"].ConnectionString))
{
files = db.Query<File>("SELECT * FROM Files where UserID=@id", new{ id });
}
return files;
}
}
创建服务或引擎以组织业务逻辑
public class UserDetails
{
public User User { get; set; }
public List<File> Files { get; set; }
}
在控制器中调用
public class UsersService
{
private UsersRepository _usersRepository;
public UsersService()
{
_usersRepository = new UsersRepository();
}
public UserDetails GetUserDetails(int userId)
{
var details = new UserDetails();
details.User = _usersRepository.GetUser(id);
details.Files = _usersRepository.GetUserFiles(id);
return details;
}
}
但是请记住,它是非常简化的示例。例如,最好使用依赖注入而不是在构造函数中初始化服务或存储库。同样,在许多情况下,对于视图和存储库逻辑使用相同的类并不是很明智,请考虑在本地使用DTO和域类。对于简单的应用程序和演示,应该没问题。