【问题标题】:How to use code first migrations to update a database?如何使用代码优先迁移来更新数据库?
【发布时间】:2016-11-19 13:41:57
【问题描述】:

我创建了一个 c#.NET WebAPI 并且它可以工作,但是当我更改模型时它停止工作并且它给了我以下错误消息。

支持“ApiDbContext”上下文的模型自 数据库已创建。考虑使用 Code First 迁移来更新 数据库。

这是我的代码:

模型(不变):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Test.Models
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        //public DateTime startTime { get; set; }
        //public DateTime endTime { get; set; }
        //public int Age { get; set; }
        //public string Adress { get; set; }
    }
}

模型(已更改):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Test.Models
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime startTime { get; set; }
        //public DateTime endTime { get; set; }
        //public int Age { get; set; }
        //public string Adress { get; set; }
    }
}

控制器(在 updateUser 处更改):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Test.DBA;
using Test.Models;

namespace Test.Controllers
{
    public class UserAPIController : ApiController
    {
        ApiDbContext dbContext = null;
        public UserAPIController()
        {
            dbContext = new ApiDbContext();
        }
        [HttpPost]
        public IHttpActionResult InsertUser(User user)
        {
            dbContext.Users.Add(user);
            dbContext.SaveChangesAsync();

            return Ok(user.Name);
        }

        public IEnumerable<User> GetAllUser()
        {
            var list = dbContext.Users.ToList();
            return list;
        }

        [HttpPost]
        public IHttpActionResult DeleteUser(User user)
        {
            dbContext.Users.Remove(user);
            dbContext.SaveChanges();

            return Ok(user.Name);
        }

        [HttpGet]
        public IHttpActionResult ViewUser(int id)
        {
            var student = dbContext.Users.Find(id);
            return Ok(student);
        }

        [HttpPost]
        public IHttpActionResult UpdateUser(User user)
        {
            User std = dbContext.Users.Find(user.Id);

            std.Name = user.Name;
            std.startTime = user.startTime;
            //std.endTime = user.endTime;
            //std.Age = user.Age;
            //std.Adress = user.Adress;

            dbContext.Entry(std).State = System.Data.Entity.EntityState.Modified;
            dbContext.SaveChangesAsync();

            return Ok();
        }
    }
}

DBContext:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using Test.Models;

namespace Test.DBA
{
    public class ApiDbContext :DbContext
    {
        public ApiDbContext() : base("Connection")
        {

        }
        public DbSet<User> Users { get; set; }
    }
}

连接字符串:

<connectionStrings>
   <add name ="Connection" connectionString="Data Source=.\SQLExpress;Initial Catalog=k;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>

【问题讨论】:

    标签: c# asp.net asp.net-web-api asp.net-web-api2


    【解决方案1】:

    在 package-manager-console 中输入 Enable-Migrations,在输入 add-migration 之后,设置名称,然后输入 update-database

    https://msdn.microsoft.com/en-ca/data/jj591621(v=vs.113).aspx

    【讨论】:

      【解决方案2】:
      1. Enable-Migrations:通过创建配置类在您的项目中启用迁移。
      2. Add-Migration:使用 Up() 和 Down() 方法按照指定的名称创建一个新的迁移类。
      3. Update-Database:执行 Add-Migration 命令创建的最后一个迁移文件并将更改应用到数据库架构。

      更多详情: https://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx

      【讨论】:

        猜你喜欢
        • 2018-02-24
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        • 2014-04-28
        • 2016-06-19
        • 2015-06-26
        • 1970-01-01
        • 2016-11-24
        相关资源
        最近更新 更多