我正在使用我们 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,威廉