我创建了Generic Repository,我需要在事务中更新两个实体。 这就是我在做什么..
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,但在这些交易中根本无法访问。其次,正如我所说的那样,没有交易阻止)。
如果从Transaction Block中取出,这段代码可以正常工作。
ProductLocation.SaveLocation正在为Location创建Repository。以下是保存位置的代码。
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();
}
我在这里做错了什么。
我很欣赏任何指示。
答案 0 :(得分:1)
您的服务器可能链接到数据库级别的另一个SQL服务器。
或许看看这个:http://msdn.microsoft.com/en-us/library/ms188279.aspx
必须承认我从未使用过链接服务器(至少还没有),但在错误中看到“链接服务器”让我想到了这一点。