0

我已经创建了通用存储库,并且我有两个需要在事务中更新的实体。这就是我在做什么..

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();
    }

我在这里做错了什么。

我很感激任何指示。

4

1 回答 1

1

您的服务器可能在数据库级别链接到另一个 SQL 服务器。

也许看看这个:http: //msdn.microsoft.com/en-us/library/ms188279.aspx

必须承认我从未使用过链接服务器(至少现在还没有),但是在错误中看到“链接服务器”让我想到了这一点。

于 2012-09-06T18:58:36.507 回答