我有一个实体,其中一列有奇怪的行为。在插入时,有时它被设置为应用程序传递的值,有时它使用来自另一列的新创建的标识值。目前使用存储过程实现。有没有一种干净的方法来实现Entity Framework?
我正在使用Entity Framework 6和Code First,但我不是在进行数据库生成或使用迁移。
我知道我基本上可以使用DbContext.Database来手动调用过程,就好像我没有使用EF一样,但是我在保存,参与SaveChanges事务等时丢失了所有EF的实体自动更新。什么是减轻这种情况的最佳方法?
编辑: 我将尝试用伪代码描述我理想的解决方案。问题是,在实体框架6的当前功能给出真实代码的情况下,我真的能接近这一点。
理想情况下,我可以将列配置为有时是“标识”列。换句话说,有时在插入时由数据库生成,有时不会。像这样:
public sealed class WidgetConfiguration : EntityTypeConfiguration<Widget>
{
public WidgetConfiguration()
{
HasKey(d => d.Id);
Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(e => e.Number)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.SometimesIdentity);
MapToStoredProcedures(s => s.Insert(i => i.HasName("InsertWidget")));
}
}
由于这是不可能的,我想知道是否有其他方式参与SaveChanges,以便我可以利用EF善良,如依赖性分析和自动事务管理,而不是:
换句话说,是否有可能告诉EF,“嘿,我知道如何保存小部件。当你需要保存小部件时,这是一个回调。”或类似的东西?
答案 0 :(得分:0)
EF不刷新可能受StoredProcedure影响的实体,您必须通过调用手动执行此操作:
dbContext.Entry(myEntityToRefresh).Reload();
//or
dbContext.Entry(myEntityToRefresh).ReloadAsync();
请更改此问题的标题。它没有说什么。