实体框架,保存新数据库条目的问题

时间:2021-03-22 17:13:50

标签: c# postgresql

我试图保存我的新数据库条目,但 ID 想要增加。

这是表格列:

Procesor table columns

ID constraints

我正在使用实体框架和 Windows 窗体。添加我的 postgresql 数据库后,它创建了 Procesor 类。

public partial class Procesor
{
    public int ID { get; set; }
    public string Naziv_Procesora { get; set; }
    public Nullable<int> Godina_Proizvodnje { get; set; }
    public string Naziv_Proizvodaca { get; set; }
    public Nullable<int> Broj_Jezgri { get; set; }
    public Nullable<double> Takt_Procesora { get; set; }
    public Nullable<decimal> Cijena_Procesora { get; set; }

    public virtual Konfiguracija_Racunala Konfiguracija_Racunala { get; set; }
}

}

之后我创建了用于生成绑定列表并插入数据库的新类

class Procesori
    {
        public BindingList<Procesor> DohvatiProcesore()
        {
            BindingList<Procesor> listaProcesora;
            using (RacunalaEntities enteties = new RacunalaEntities())
            {
                listaProcesora = new BindingList<Procesor>(enteties.Procesors.ToList());
            }
            return listaProcesora;
        }

        public void unosProcesora(string naziv, int godina, string proizvodac, decimal cijena, int jezgre, double takt)
        {
            using (RacunalaEntities enteties = new RacunalaEntities())
            {
                Procesor procesor = new Procesor();
                procesor.Naziv_Procesora = naziv;
                procesor.Naziv_Proizvodaca = proizvodac;
                procesor.Godina_Proizvodnje = godina;
                procesor.Broj_Jezgri = jezgre;
                procesor.Takt_Procesora = takt;
                procesor.Cijena_Procesora = cijena;

                enteties.Procesors.Add(procesor);
                enteties.SaveChanges();
            }
        }
    }

在我的表单中,我想向数据库添加新的处理器,但我不能

我的表单代码:

public partial class Form1 : Form
    {
        RacunalaEntities context = new RacunalaEntities();
        Procesori procesori = new Procesori();

        public Form1()
        {
            InitializeComponent();
            dataGridView1.DataSource = procesori.DohvatiProcesore();
            
            

        }       

        private void btnDodajProcesore_Click(object sender, EventArgs e)
        {
            string nazivProcesora = txtNazivProcesora.Text;
            int godinaProizvodnje = int.Parse(txtGodinaProizvodnje.Text);
            string nazivProizvodaca = txtNazivProizvodaca.Text;
            decimal cijenaProcesora = decimal.Parse(txtCijenaProcesora.Text);
            int brojJezgri = int.Parse(txtBrojJezgri.Text);
            double taktProcesora = double.Parse(txtTaktProcesora.Text);
            procesori.unosProcesora(nazivProcesora,godinaProizvodnje,nazivProizvodaca,cijenaProcesora,brojJezgri,taktProcesora);
            MessageBox.Show("Podaci su spremljeni");
        }
    }

错误代码:

<块引用>

PostgresException: 428C9: 无法插入到“ID”列中

2 个答案:

答案 0 :(得分:0)

尝试使用以下属性装饰 Id 属性。

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

答案 1 :(得分:0)

要解决这个问题,首先进入你的 pgAdmin4 并像这样设置列约束 Identity BY DEFAULT:

Column constraint Identity

之后进入 Visual Studio 并打开您的 .edmx 模型。在我的例子中,在定义的表中是表“处理器”列“Id”打开属性并将存储生成模式设置为 IDENTITY,如下所示:

IDENTITY

现在一切正常,我的 ID 自动递增 :D 我使用的是数据库优先方法。