0

Generic Repository を作成しました。トランザクションで更新する必要があるエンティティが 2 つあります。これが私がしていることです..

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 のリポジトリを作成しています。これが Save 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 に答える