我是MVC编程的新手。在普通的OOP中,我有我的类,我只是初始化并从数据库加载数据。在MVC中,我们有模块,如何从中加载记录?
这是我当前的UserAcount类型代码:
[Table("UserAccount")]
public class UserAccount {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string userName { get; set; }
public string email { get; set; }
public int companyID { get; set; }
}
假设我有一个名为“testUser”的用户,如何初始化此记录并获取其信息?我该怎么做:
UserAccount user = new UserAccount("tesetUser");
我如何以及在哪里使用它?
user = user.SingleOrDefault(u => u.userName.ToLower() == User.Identity.Name.ToLower());
答案 0 :(得分:1)
您需要阅读Entity Framework。这是MVC使用的默认ORM。简单地:
如果您还没有项目上下文,请创建一个:
public class MyProjectContext : DbContext
{
public MyProjectContext()
: base("name=ConnectionStringNameHere")
{
}
}
将模型添加到项目上下文中:
public class MyProjectContext : DbContext
{
...
public DbSet<SomeModel> SomeModels { get; set; }
public DbSet<SomeOtherModel> SomeOtherModels { get; set; }
# etc.
}
使用Package Manager控制台更新数据库(TOOLS&gt;库包管理器&gt;包管理器控制台):
> update-database
(输入后点击ENTER)
现在,要在控制器中使用您的上下文:
public class MyAwesomeController : Controller
{
private MyProjectContext db = new MyProjectContext();
public ActionResult Index()
{
var someModels = db.SomeModels;
return View(someModels);
}
public ActionResult GetSomeModel(int id)
{
var someModel = db.SomeModels.Find(id);
return View(someModel);
}
# other actions
}
答案 1 :(得分:0)
在最简单的情况下,您应该在控制器中执行此逻辑,这将把数据传递给视图。但是,MVC用于关注UI分离,因此从理论上讲,您应该在域层中执行此操作,从您的控制器调用它。
Here is a decent article from Jeff Atwood,但我不同意控制器是应用程序的大脑。它更多的是UI的大脑......但这取决于代码的复杂程度。如果它是非常简单的,不要创建域图层
答案 2 :(得分:0)
在MVC模型中,控制器负责处理HTTP请求。
通常,您会在控制器操作中加载您的实体(例如UserAccount)。
如果要编辑/更新实体,通常会将相关字段映射到反映UserAccount的模型。建议使用单独的模型,因为UI的需求通常与实体模型的需求有些不同。为每个问题设置单独的类可以避免污染实体模型以满足视图的需要。