我在Postgresql中有一个带有以下列的表:
Id | Index
我想实现一个像这样的功能
int GetNextIndex(string Id)
该函数将使用Id=Id
查找实体,并递增Index,然后返回旧值(更新前)。如何使用C#中的Entity Framework自动执行此操作?
谢谢!
答案 0 :(得分:0)
我可能会过于简化您的任务,但是如果您只想要序列,那么应该可以执行以下操作:
public int GetId(string SequenceName)
{
int result;
using (NpgsqlConnection conn = new NpgsqlConnection(connectionstring))
{
conn.Open();
using (NpgsqlCommand id = new NpgsqlCommand(string.Format(
"select nextval('{0}')", SequenceName), conn))
result = Convert.ToInt32(id.ExecuteScalar());
conn.Close();
}
return result;
}
如果具有独立的连接对象等,则应该能够对此进行调整。
我可能会在这里前进,但是我最喜欢的功能之一是以下功能,它接收对象的集合并为对象中的每个“ Id”字段(或您的ID / PK所在的任何字段)分配一个值。这样的事情也可能也适合您的任务:
public void AssignSequences(string SequenceName, string PropertyName,
IEnumerable<object> DomainObjects)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionstring))
{
conn.Open();
using (NpgsqlTransaction trans = conn.BeginTransaction())
{
using (NpgsqlCommand id = new NpgsqlCommand(string.Format(
"select nextval('{0}')", SequenceName),
conn, trans))
{
foreach (object o in DomainObjects)
{
PropertyInfo p = o.GetType().GetProperty(PropertyName);
p.SetValue(o, Convert.ToInt32(id.ExecuteScalar()));
}
}
trans.Commit();
}
conn.Close();
}
}
假设您的Id字段名为“ Id”,则看起来像这样:
AssignSequences("order_line_id", "Id", NewOrders);