假设我创建了一个Entity Framework entity1并将其添加到dbContext1。 然后,我出于任何原因,Dispose dbContext1并创建一个新的DbContext2。
现在可以通过将entity1添加到dbContext2来重用entity1吗?
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
}
}
}
}
答案 0 :(得分:0)
是的,因为实体没有保留对当前与之关联的上下文(或上下文)的引用。
答案 1 :(得分:0)
这是一个棘手的问题。如果更改已持久,则实体将填充标识字段。不要仅仅因为事务已经回滚而不被填充 - 这是DbContext
类的实现细节。
因此,如果您将相同的实体添加到新的DbContext
,假设它仍然是新的,即没有填充其身份字段,则在尝试第二次持续更改时可能会遇到麻烦。 / p>
我的建议不是这样做,因为您的代码的正确性取决于实体框架的实现细节。毋庸置疑,实施可能会在未来发生变化,然后您的代码似乎今天正常工作将在明天停止工作。