2016-09-13 4 views
1

내가 오류System.Data.SqlClient.SqlException : 잘못된 개체 이름 'DBO .__ TransactionHistory'

"System.Data.SqlClient.SqlException :. 잘못된 개체 이름 'DBO .__ TransactionHistory'"

EF 6.1.3에서 TransactionContext을 사용하여 new dbcontext을 만들려고 할 때. DBMigrator/Initializer이 트랜잭션 내에서 수행되기 때문에 트랜잭션 콘텍스트 API를 사용하는 버그처럼 보입니다. 다음은

문제

 

using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Data.Entity.SqlServer; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      new SomeDbContext().Database.Initialize(false); 
     } 

     public class Person 
     { 
      public virtual int Id { get; set; } 
      public virtual string Name { get; set; } 
     } 

     public class MyConfiguration : DbConfiguration 
     { 
      public MyConfiguration() 
      { 
       SetTransactionHandler(SqlProviderServices.ProviderInvariantName,() => new CommitFailureHandler()); 
      } 
     } 


     [DbConfigurationType(typeof(MyConfiguration))] 
     public class SomeDbContext : DbContext 
     { 
      static SomeDbContext() 
      { 
       Database.SetInitializer(new DropCreateDatabaseAlways()); 
      } 

      public SomeDbContext() 
       : base(@"Data Source=.;Initial Catalog=SomeDbContext;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=1;") 
      { 
      } 

      public virtual DbSet People { get; set; } 
     } 
    } 
} 

 

답변

1

내가이 일을 결국 복제 코드입니다.

  1. 수동으로 테이블이 때문에의 사용이 기능을 밝혀 가치가 없다
+0

을 생성 될 때까지 기본 메소드를 호출하지 않도록 BeganTransaction을 재정의하는 CommitFailureHandler 만들기 SQL

CREATE TABLE [dbo].[__TransactionHistory] ( [Id] [uniqueidentifier] NOT NULL, [CreationTime] [datetime] NOT NULL, CONSTRAINT [PK_dbo.__TransactionHistory] PRIMARY KEY ([Id])
  • 을 실행 문서화 된 제한 사항 -> https://msdn.microsoft.com/en-us/data/dn307226 "사용자가 시작한 트랜잭션이 지원되지 않음"이 악화되었습니다. –

  • 관련 문제