使用EntityFramework添加新记录

时间:2016-02-18 15:11:01

标签: c# asp.net asp.net-mvc entity-framework

我正在创建一个测试项目,以便使用asp.net 5mvc 6框架进行学习。

我决定创建一个简单的网页,每个菜单项都来自数据库。为此,我创建了一个类似

的模型
namespace TestTemplate.Models
{
    public class SideMenuItem
    {
        public int Id { get; set; }

        public string Level { get; set; }

        public string Label { get; set; }

        public string Link { get; set; }
    }
}

在我的Models文件夹中,我还有一个名为`TestContext.cs'的文件

namespace TestTemplate.Models
{
    public class TestContext : DbContext
    {
        public DbSet<SideMenuItem> SideMenuItems { get; set; }
    }
}

这是我的EntityFramework DbContext课程。

尝试使用带有表单的简单视图创建新的SideMenu项目以添加所有需要的数据时,然后使用看起来像这样的角度工厂

return $resource('/api/sidemenu/:id');

我收到错误:

An exception of type 'Microsoft.Data.Entity.DbUpdateException' occurred in EntityFramework.Core.dll but was not handled in user code

Additional information: An error occurred while updating the entries. See the inner exception for details.

-->System.Data.SqlClient.SqlException: Invalid object name 'SideMenuItem'.

SideMenuController.cs发生此错误,我在我尝试发布新项目的部分定义了我的API:

[HttpPost]
public IActionResult Post([FromBody]SideMenuItem sideMenuItem)
{
    if (sideMenuItem.Id == 0)
    {
        _dbContext.SideMenuItems.Add(sideMenuItem);
        _dbContext.SaveChanges();                        // ERROR HERE.
        return new ObjectResult(sideMenuItem);
    }
    else
    {
        var original = _dbContext.SideMenuItems.FirstOrDefault(m => m.Id == sideMenuItem.Id);
        original.Level = sideMenuItem.Level;
        original.Label = sideMenuItem.Label;
        original.Link = sideMenuItem.Link;
        _dbContext.SaveChanges();
        return new ObjectResult(original);
    }
}

我还应该提一下,在运行我使用的应用程序之前

>dnx ef migration add initial
>dnx ef database update

我认为这与我没有正确创建数据库有关。因为我没有在项目中看到任何与数据库或迁移有关的文件夹。

为什么抱怨SideMenuItem无效,我该如何解决问题?

1 个答案:

答案 0 :(得分:0)

在尝试再次创建我的数据库之后,我注意到我的迁移命令出了问题,因此没有创建数据库。

该命令应为dnx ef migrations ...,带有s。

可以找到所有命令的良好起点here