我是Entity Framework的新手。我有多个具有'SortOrder'列的表。此列声明呈现时行应显示的顺序。
每当通过我的应用程序发生插入时,我希望DBcontext“检测”存在一个sortorder列,并让它自动使用此特定表中的MAX(sortorder)填充/覆盖此值+ 1。
实现这一目标的最佳方法是什么?我已尝试使用数据库触发器,但显然这对EF不起作用。
除此之外,我只能想到一些讨厌的反思,或者在我在应用程序中执行的每个插入中编写这个逻辑(或者至少每个表格中都有一次)。
感谢,
答案 0 :(得分:0)
尝试将属性添加到SorderOrder
列
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
阅读Entity Framework auto incrementing field, that isn't the Id
答案 1 :(得分:0)
让所有具有SortOrder列的实例实现公开接口(IHasSortOrder),该接口公开SortOrder属性:
public interface IHasSortOrder { int SortOrder { get; set; } }
向ObjectContext.SavingChanges事件添加事件处理程序。通过调用IObjectContextAdapter.ObjectContext获取ObjectContext的实例(DbContext实现IObjectContextAdapter):
var octx = (this as IObjectContextAdapter).ObjectContext;
octx.SavingChanges += this.OnSavingChanges;
在此事件处理程序中,您可以访问所有待插入的对象:
ctx.ChangeTracker.Entries().Where(x => x.State == EntityState.Added).Select(x => x.Entity).OfType<IHasSortOrder>()
遍历此集合并按照您想要的方式设置SortOrder。