EF6 Code First:插入多个表中出现的初始化列时

时间:2014-11-27 08:38:58

标签: c# entity-framework

我是Entity Framework的新手。我有多个具有'SortOrder'列的表。此列声明呈现时行应显示的顺序。

每当通过我的应用程序发生插入时,我希望DBcontext“检测”存在一个sortorder列,并让它自动使用此特定表中的MAX(sortorder)填充/覆盖此值+ 1。

实现这一目标的最佳方法是什么?我已尝试使用数据库触发器,但显然这对EF不起作用。

除此之外,我只能想到一些讨厌的反思,或者在我在应用程序中执行的每个插入中编写这个逻辑(或者至少每个表格中都有一次)。

感谢,

2 个答案:

答案 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。