繁体   English   中英

EF6代码优先:插入在多个表中出现的初始化列时

[英]EF6 Code First: when inserting initialize column that occures in multiple tables

我是实体框架的新手。 我有多个表具有“ SortOrder”列。 此列声明在呈现时行应出现的顺序。

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

实现此目标的最佳方法是什么? 我已经尝试过使用数据库触发器,但是显然,它不能与EF很好地配合使用。

除此之外,我只能想到一些讨厌的反射,或者在我在应用程序中所做的每个插入中编码此逻辑(或者对于每个表至少一次)。

谢谢,

尝试将属性添加到您的SorderOrder

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

读取Entity Framework自动递增字段,而不是ID

让所有具有SortOrder列的实例实现一个公共接口(IHasSortOrder),该接口公开一个SortOrder属性:

public interface IHasSortOrder { int SortOrder { get; set; } }

将事件处理程序添加到ObjectContext.SavingChanges事件。 您可以通过调用IObjectContextAdapter.ObjectContext(DbContext实现IObjectContextAdapter)来获得ObjectContext的实例:

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM