我已经创建了通用存储库,并且我有两个需要在事务中更新的实体。这就是我在做什么..
ProductOrganizationEntity poDataContext= new ProductOrganizationEntity();
IRepository<tblProductInfo> productRepo = new GenericRepository<ProductOrganizationEntity, tblConfirmation>(poDataContext);
导致问题的代码就是这个。
using (TransactionScope txScope = new TransactionScope())
{
productRepo.Attach(productEntity);
productRepo.SaveChanges();
new ProductLocation().SaveLocation(productEntity.Locations, productEntity.productCode);
txScope.Complete();
}
productRepo.SaveChanges(); 这就是它给我带来错误的地方。错误是
The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "Venus" was unable to begin a distributed transaction.
(我们确实有名为 Venus 的服务器,但它在这些事务中根本无法访问。其次,正如我所说,这在没有事务块的情况下工作)。
如果从事务块中取出,这段代码可以正常工作。
ProductLocation.SaveLocation 正在为 Location 创建存储库。这是保存位置的代码。
IRepository<LocationInfo> locRepo= new GenericRepository<ProductOrganizationEntity, LocationInfo>(new ProductOrganizationEntity());
if (loc.locID <= 0) // This is a new Location to be added.
locRepo.Add(locEntity);
else
locRepo.Attach(siteToAdd);
locRepo.SaveChanges();
这是我在我的通用存储库中为这些方法所做的
public void Attach(TEntity entity)
{
if (entity == null)
throw new ArgumentException("Update : Supplied Entity is Null.");
_currentDbSet.Add(entity);
System.Data.Entity.Infrastructure.DbEntityEntry entry = _dataContext.Entry(entity);
entry.State = System.Data.EntityState.Modified;
}
这就是我在通用存储库中 SaveChanges 中的内容。
public virtual void SaveChanges()
{
if (_dataContext == null)
throw new Exception("SaveChanges: DataContext is not initialized.");
_dataContext.SaveChanges();
}
我在这里做错了什么。
我很感激任何指示。