0

我只是在学习 MVC、Web API 和实体框架。

我在 VS 2012 中创建了一个带有 Web API 的 MVC 4 Web 应用程序。在模型下,我右键单击添加,然后单击 ADO.NET 实体数据模型。这使我能够创建我想要的数据库布局。然后我右键单击并选择从模型生成数据库。

一切似乎都正常工作 - 至少创建了新数据库,并且我在创建的 ...Model.tt 下看到了我的每个表的类。在 ...Model.Context.tt 我有一个 ...Model.Context.cs 包含:

    public DbSet<User> Users { get; set; }
    public DbSet<Message> Messages { get; set; }
    public DbSet<State> States { get; set; }
    public DbSet<Item> Items { get; set; }

当我在 /api/user/ 尝试 Web API 时,我收到了找不到资源的错误。所以我想我可能需要创建控制器?api控制器?这就是我所做的,我的每个表都有一个控制器 - UserController、MessageController 等。创建每个表还需要指定一个数据上下文类 - 我选择创建一个我认为可能是错误的新表。

我现在看到的问题是我拥有所有这些类,它们都创建了一个 DbContext 基类。我刚刚注意到每个都在 web.config 中添加了一个连接字符串行。:S

我确定这是不对的——所有这些表都在同一个数据库中,因此只需要一个连接。

根据我记录的内容,谁能告诉我哪里出错了?我应该为每个表创建一个控制器吗?

谢谢。

4

1 回答 1

1

我不太清楚你所说的“所有这些类”是什么意思。您的意思是您的每个控制器中都有数据库上下文的实例吗?或者你的字面意思是你已经创建了一个 UsersDataContext 和一个 MessagesDataContext.. 等等。

您的应用程序中应该只有一个 DbContext,尽管您会有很多实例。我不确定你哪里出错了,因为我不知道它要求你创建多个上下文的地方......所以我不明白你说“我选择创建一个新上下文”的地方。

是否为每个表创建控制器取决于许多因素。控制器应该以您的功能为中心。例如 Account 控制器、Home Controller 或 Product 控制器……在某些情况下可能会映射到表,但实际上是围绕您的功能需求。

于 2013-09-28T22:31:10.297 回答