如何初始化MVC模块?

时间:2013-03-07 19:00:35

标签: c# asp.net-mvc

我是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());

3 个答案:

答案 0 :(得分:1)

您需要阅读Entity Framework。这是MVC使用的默认ORM。简单地:

  1. 如果您还没有项目上下文,请创建一个:

    public class MyProjectContext : DbContext
    {
        public MyProjectContext()
            : base("name=ConnectionStringNameHere")
        {
        }
    }
    
  2. 将模型添加到项目上下文中:

    public class MyProjectContext : DbContext
    {
        ...
    
        public DbSet<SomeModel> SomeModels { get; set; }
        public DbSet<SomeOtherModel> SomeOtherModels { get; set; }
        # etc.
    }
    
  3. 使用Package Manager控制台更新数据库(TOOLS&gt;库包管理器&gt;包管理器控制台):

    > update-database
    
  4. (输入后点击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的需求通常与实体模型的需求有些不同。为每个问题设置单独的类可以避免污染实体模型以满足视图的需要。