我使用Entity Framework 4创建了一个非常简单的数据库。我想要能够在实体上使用事务,但似乎无法阻止更改回滚。 我只需要一种在将实体保存到数据库之前放弃临时更改的方法。
例如,以下代码使用了一个Entity Framework对象上下文"MusicContainer"。在一个TransactionScope内,创建了一个Artist实体。然后事务未被完成就结束了;因此我期望事务会被回滚。但是,程序运行得好像我根本没有首先创建TransactionScope一样;在TransactionScope结束后,代码music.SaveChanges()将对象保存到数据库。
class Program
{
static void Main(string[] args)
{
using (MusicContainer music = new MusicContainer())
{
using (TransactionScope transaction = new TransactionScope())
{
Artist artist = new Artist { Name = "Test" };
music.Artists.AddObject(artist);
}
// The transaction ended without Complete(); shouldn't the changes be abandoned?
music.SaveChanges();
}
}
}
如果实体框架没有按照我期望的方式使用TransactionScope,那么我该如何获得所需的功能? 我有几种情况,调用函数的调用者会传递MusicContainer,并且我需要在从函数返回之前将MusicContainer保持在干净状态(即回滚更改,以便它们不会意外地保存在同一MusicContainer对象上调用的另一个SaveChanges中)。
SaveChanges()
或执行查询时,还请查看此 MSDN 文章:http://msdn.microsoft.com/en-us/library/cc853327.aspx - BrokenGlass