Asp.Net Core 3.1 数据被检索但未保存到数据库中

Posted

技术标签:

【中文标题】Asp.Net Core 3.1 数据被检索但未保存到数据库中【英文标题】:Asp.Net Core 3.1 Data is retrieved but not saved into database 【发布时间】:2020-05-09 14:35:10 【问题描述】:

我正在创建一个 Asp.Net 核心 Web 应用程序。我已成功将数据库连接到我的应用程序。我可以成功运行所有迁移,甚至可以从数据库中检索数据。但是当我尝试使用我的 DbContext 保存数据时,数据并没有保存在数据库中。这是我的代码

类别模型类

public class Category

    public int Id  get; set; 
    public string Name  get; set; 

类别控制器

public class CategoryController : Controller

    private readonly AppDbContext dbContext;

    public CategoryController(AppDbContext dbContext)
    
        this.dbContext = dbContext;
    

    [HttpGet]
    public IActionResult Index()
    
        var categories = dbContext.Categories.ToList();
        return View(categories);
    

    [HttpGet]
    public IActionResult Create()
    
        return View();
    

    [HttpPost]
    public IActionResult Create(Category category)
    
        if (ModelState.IsValid)
        
            dbContext.Categories.Add(category);
            return RedirectToAction(nameof(Index));
        
        return View();
    

查看

<form asp-action="Create">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Name" class="control-label"></label>
            <input asp-for="Name" class="form-control" />
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
 </form>

DbContext 类

public class AppDbContext : DbContext

    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    

    

    public DbSet<Category> Categories  get; set; 

最后是我的启动中的ConfigureServices方法文件

public void ConfigureServices(IServiceCollection services)
    
        services.AddControllersWithViews();

        services.AddDbContext<AppDbContext>(options => options
        .UseLazyLoadingProxies()
        .UseSqlServer(Configuration.GetConnectionString("AppDbContext")));
    

我在 Index 方法中成功获取了手动存储在数据库中但无法从表单中保存的数据。

【问题讨论】:

【参考方案1】:

需要调用EntityFramework的SaveChanges()方法来保存数据:

dbContext.Categories.Add(category);
dbContext.SaveChanges();

创建、更新、删除操作后需要调用SaveChanges

【讨论】:

谢谢。更新删除后也需要吗? @AwaisSaeed 是的,创建、更新、删除操作后需要调用SaveChanges【参考方案2】:

在实体框架中,DbContext.SaveChanges() 方法保存在数据库上下文中所做的所有更改。

所以在添加、更新或删除数据后你需要调用SaveChages()方法:

dbContext.Categories.Add(category);
dbContext.SaveChanges();

如需了解更多关于SaveChange() 的信息,您可以关注此link。

【讨论】:

以上是关于Asp.Net Core 3.1 数据被检索但未保存到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net core 3.1 解密 CryptoStream 得到“输入数据不是一个完整的块”

ASP.NET Core--.net core 3.1 部署到 IIS

Asp .Net Core 3.1 Razor 页面:复杂模型绑定

ASP.NET Core 3.1 中的数据表服务器端处理

一个文件搞定Asp.net core 3.1动态页面转静态页面

发布到 ASP.NET Core 3.1 Web 应用程序时,“[FromBody]MyClass 数据”通常为空