0

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

3 回答 3

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. 使用包管理器控制台(工具 > 库包管理器 > 包管理器控制台)更新您的数据库:

    > 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
}
于 2013-03-07T19:50:19.030 回答
0

在最简单的情况下,您应该在控制器中执行此逻辑,这会将数据传递给视图。然而,MVC 是为了 UI 分离关注点,所以理论上你应该在你的域层中这样做,它是从你的控制器调用的。

这是 Jeff Atwood 的一篇不错的文章,但我不同意控制器是应用程序的大脑。它更多的是 UI 的大脑......但这取决于你的代码有多复杂。如果它非常简单,请不要创建域层

于 2013-03-07T19:04:49.557 回答
0

在 MVC 模型中,Controller 负责处理 HTTP 请求。

通常,您会在控制器操作中加载您的实体(例如 UserAccount)。

如果要编辑/更新实体,通常会将相关字段映射到反映 UserAccount 的模型。建议使用单独的模型,因为 UI 的需求通常与实体模型的需求有所不同。为每个关注点设置单独的类可以避免污染实体模型以满足视图的需求。

于 2013-03-07T19:05:16.727 回答