假设我已经创建了一个实体框架entity1并将其添加到dbContext1中。然后,无论出于何种原因,我都要处理dbContext1并创建一个新的DbContext2。
现在可以通过将entity1添加到dbContext2来重用它吗?
EF版本为6.1.3。
public class DbSaver
{
MyDbContext _context;
public DbSaver()
{
MyDbContext _context = new MyDbEntities();
}
public void MustDoSave(/*whatever*/)
{
bool saved = false;
MyEntity entity1 = new MyEntity() { /*setup entity field values here*/ };
_context.Add(entity1);
while (!saved)
{
try
{
_context.SaveChanges();
saved = true;
}
catch
{
_context.Dispose(); // dispose the original context ("contextA)
_context = new MyDbEntities(); // create a fresh one
// the questionable part:
_context.Add(entity1); // is it legal to now reuse an entity previously added to the old context ("contextB")??
Thread.Sleep(1000); // wait before fresh retry
}
}
}
}
这是一个棘手的问题。如果更改被保留,则实体将填充身份字段。不要假设仅仅因为事务已经回滚而不会填充它-这是DbContext
该类的实现细节。
因此,如果在DbContext
假定新实体仍是新实体的情况下将其添加到新实体,即未填充其标识字段,则当您尝试第二次保留更改时可能会遇到麻烦。
我的建议是不要这样做,因为代码的正确性然后取决于Entity Framework的实现细节。不用说,将来实现可能会发生变化,然后您今天看起来运行良好的代码明天将停止工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句