首页 > 解决方案 > ef form app c# code first with sqlite error db.SaveChanges no such a table

问题描述

我有一个 ef 表单应用程序,我尝试在产品表上添加一些产品。当我开始项目时,shop.db 正在生成文件并且我可以看到表(产品和类别)但是当我尝试将任何产品添加到产品表时,我正在接受“SqliteException:SQLite 错误 1:'没有这样的表: ProductModels'。” 错误。

'SaveChanges (db);' 导致错误。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; 

public class ShopContext : DbContext
    {
        public DbSet<ProductModel> ProductModels { get; set; }
        public DbSet<CategoryModel> CategorieModels { get; set; }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder

                .UseSqlite("Data Source=shop.db");

        }
    }
    public class ProductModel
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public decimal Price { get; set; }

    }

    public class CategoryModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    public class Class1
    {
        public void AddProduct()
        {
            using (var db = new ShopContext())
            {
                var p = new ProductModel();

                p.Name = "Samsung s6";
                p.Price = 100000;

                db.ProductModels.Add(p);
                db.SaveChanges();
            }
        }

    }

我有一个表格。它包含一个按钮和一个文本。当我单击按钮时,我希望将产品添加到数据库和要写入的文本。表单代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.EntityFrameworkCore;

namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }

        public void button1_Click(object sender, EventArgs e)
        {
            Class1 c = new Class1();
            c.AddProduct();
            label1.Text = "Yazı";

        }
    }
}

如何解决?

标签: c#entity-frameworksqliteef-code-first

解决方案


除非另有说明,否则 EF 正在寻找一个名为ProductModel但不存在的表。

您可以将您的 DbSet 重命名为:(我会推荐这个)

  public DbSet<ProductModel> Product { get; set; }
  public DbSet<CategoryModel> Category { get; set; }

或者您可以在模型中显式设置表名:

[Table("Product")]
public class ProductModel
{
    public int Id { get; set; }

    public string Name { get; set; }

    public decimal Price { get; set; }
}

推荐阅读