我正在使用EF6。我创建了一个类并对其进行编码,因此在实例化时它会创建一个名为_ctx的数据库上下文。该类有一个如下所示的Execute()方法:
using (var txn = _ctx.Database.BeginTransaction())
{
try
{
_ctx.Messages.Add(new Message()
{
MessageId = messageId,
ReceivingApplication = receivingApp
});
var message = _ctx.Messages.FirstOrDefault(m => m.MessageId == 178); // This message ID is INVALID
message.IsValid = hl7Data.IsValid;
_ctx.SaveChanges();
txn.Commit();
}
catch (Exception ex)
{
txn.Rollback();
}
}
没有ID为178的消息,因此抛出异常然后捕获并执行txn.Rollback()行。令我困惑的是新消息已插入数据库。我原以为这会被回滚,因为它属于交易范围。
我错过了什么?