0

我正在使用我们 ERP 中的现有数据库。

在我所有的数据库表中,有一个名为“r_e_c_n_o_”的浮点字段,但该字段不是由数据库自动递增的,我无法更改它。

对于所有添加的实体,我想增加这个字段“r_e_c_n_o_”,我如何在 DbContext 的 SaveChanges() 方法中完成它?

使用 ADO.NET 我会做这样的事情:

    public static int GetNext(string tableName, string fieldName)
    {
        var cmd = _conn.CreateCommand(string.Format("SELECT MAX({0}) + 1 FROM {1}", fieldName, tableName));
        var result = (int)cmd.ExecuteScalar();
        return result;
    }

更新:请查看下面的评论,这正是我解决问题所需要的:

    public override int SaveChanges()
    {
        var entries = this.ChangeTracker.Entries();
        Dictionary<string, int> lastRecnos = new Dictionary<string, int>();
        foreach (var entry in entries)
        {
            var typeName = entry.Entity.GetType().Name;

            if (lastRecnos.ContainsKey(typeName))
                lastRecnos[typeName]++;
            else
                lastRecnos[typeName] = 0;//How can i get the max here?

            int nextRecnoForThisEntity = lastRecnos[typeName];

            var entity = entry.Entity as EntityBase;
            entity.Recno = nextRecnoForThisEntity;


        }
        return base.SaveChanges();
    }

Tks,威廉

4

0 回答 0