如何使用实体框架更新数据库中的数量

我想编写一个更新数据库中数量的函数。在我的代码中,它将引发错误“ stokModel为null”。为什么?我无法在我的datagridview行中找到id,并且stok模型返回null。我的问题是如何在xstSabits中获取每个记录的ID,并使用此ID更新数量。

这是我的代码;

private void StokMiktariGuncelle()
{
    for (int i = 0; i < dgvSepet.Rows.Count; i++)
    {
        using (fastCellDbEntities db = new fastCellDbEntities())
        {
            var stokModel = db.xstSabits.Find(Convert.ToInt32(dgvSepet.Rows[i].Cells["Id"].Value));

            stokModel.azamiStok -= stokModel.azamiStok - Convert.ToDecimal(dgvSepet.Rows[i].Cells["Quantity"].Value);

            db.Entry(stokModel).Property(x => x.azamiStok).Currentvalue = stokModel.azamiStok;
            db.SaveChanges();
        }
    }
}
azhenzhen 回答:如何使用实体框架更新数据库中的数量

似乎在DataGriView中管理您的ID似乎有些棘手。 当您要手动设置列时,您可能需要考虑设置每列的DataPropertyName属性。完成此操作后,您可以将您的DatabaseModels直接绑定到Grids DataSource。

这将使从选定行中读取ID变得容易。

这是一个简单的示例:

    CREATE TABLE exampleEntity
    (
        [Id] int not null PRIMARY KEY IDENTITY(1,1),[SomeValue] int not null,[SomeString] varchar(max) null
    );

    INSERT INTO exampleEntity ([SomeValue],[SomeString])
    VALUES
    (42,'String21ß'),(35,'asdadkpq3eß0i'),(37,''),(24,null),(17,'laksjdadjqpwdp')
    ;

从这个简单的数据库中,我从数据库EF模型中建立了代码优先的支架。

然后只需设置您的DataGridView(向每列添加DataPropertyName

    public Form1()
    {
        InitializeComponent();

        this.dt.AutoGenerateColumns = false;
        this.dt.MultiSelect = false;
        this.dt.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

        //Id column
        this.dt.Columns.Add(new DataGridViewTextBoxColumn()
        {
            DataPropertyName = "Id",//Name of database column
            Name = "Id",//Display name of datagrid column
            Visible = false
        });

        //SomeValue Column
        this.dt.Columns.Add(new DataGridViewTextBoxColumn()
        {
            DataPropertyName = "SomeValue",Name = "Value"
        });

        //SomeString Column
        this.dt.Columns.Add(new DataGridViewTextBoxColumn()
        {
            DataPropertyName = "SomeString",Name = "String"
        });
    }

然后要加载数据,您现在可以使用DataBinding:

    private void Form1_Load(object sender,EventArgs e) => this.dt.DataSource = new ExampleModel().exampleEntities.ToList();

现在从所选项目中读取ID非常简单:

    private void Button1_Click(object sender,EventArgs e)
    {
        //Read id from selected item
        int idSelectedItem = (this.dt.SelectedRows[0].DataBoundItem as exampleEntity).Id;

        using (ExampleModel ctxt = new ExampleModel())
        {
            exampleEntity entity = ctxt.exampleEntities.Find(idSelectedItem);

            entity.SomeValue += 42;

            ctxt.SaveChanges();
        }
    }

重要提示,如果您重用了用于填充DataGridView的相同上下文,则可以避免在读取所选项目时打开另一个上下文。

本文链接:https://www.f2er.com/3167842.html

大家都在问