변경 사항 저장 e 제어 영역 전체에 EF 코어 없음

OmétodoSaveChanges는 대체 방안으로 salvar todas에 대한 응답은 실체 구조의 핵심이 없는 dados quando은행이다.행정장관 에세 메토도(esse método,por padr ão,estamos executando)가 오마하 대서양지역 오페라하우스 원장documentaçãodiz:

Por padrão, se o provedor de banco de dados oferecer suporte a transações, todas as alterações em uma única chamada para SaveChanges serão aplicadas em uma transação. Se qualquer uma das alterações falhar, a transação é revertida e nenhuma das alterações será aplicada ao banco de dados.


Serátratado aqui o Functionamento do métodoSaveChangesanalisando os logs가geradas 영사를 맡고 있다.O foco da análise seráO controle da transaçãO A versãO da biblioteca nos testeséA 5 e O banco de dados utilizado na análiseéO SQL Server da Microsoft.결과적으로 지역에 따라 사람들이 서로 다른 데이터를 이용할 수 있다.O código criado para os testes pode ser vistoaqui.

DBO 컨텍스트 구성


O개발은행은 EF 핵심 기업이 필요로 하는 정보의 배경이다.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseSqlServer(
            "Data Source=localhost,1433;Initial Catalog=Timesheet;User Id=sa;Password=Password1")
        .LogTo(message => Debug.WriteLine(message));
}
O métodoLogTo,usado na configuraçãO,éa nova maneira de acessar os logs do EF Core.하나의 직능 부서Simple Logging가 5개월 안에 허가증의 직접 등록을 완성하고 이를 기록에 포함시켰다.예가 없습니다. dados direcionados para janela de Debug do Visual Studio usando métodoDebug.Writeline.Nas versões antigasépossível se obter os logs usando o métodoUseLoggerFactory.

변경 사항 저장


검증 기능SaveChanges은 테스트에 사용되며 banco de dados가 아닌 adicionando dois objetos를 간소화했습니다.은행이 하나도 없고 은행이 하나밖에 없다.
var employee = new Employee
{
    Name = "John Doe",
    Entries = new List<TimeEntry>
    {
        new TimeEntry
        {
            Start = TimeSpan.FromHours(8),
            End = TimeSpan.FromHours(12)
        }
    }
};
context.Add(employee);

context.SaveChanges();
로그 기록이 없는 상황에서 우리는 임무 수행SaveChanges을 통해 전체 환경을 검증할 수 있다.표지 em seguida, 스페인 은행 conex ã o com o aberta.
dbug: CoreEventId.SaveChangesStarting[10004] (Microsoft.EntityFrameworkCore.Update) 
      SaveChanges starting for 'TestContext'.
dbug: CoreEventId.DetectChangesStarting[10800] (Microsoft.EntityFrameworkCore.ChangeTracking) 
      DetectChanges starting for 'TestContext'.
dbug: CoreEventId.DetectChangesCompleted[10801] (Microsoft.EntityFrameworkCore.ChangeTracking) 
      DetectChanges completed for 'TestContext'.
dbug: RelationalEventId.ConnectionOpening[20000] (Microsoft.EntityFrameworkCore.Database.Connection) 
      Opening connection to database 'Timesheet' on server 'localhost,1433'.
dbug: RelationalEventId.ConnectionOpened[20001] (Microsoft.EntityFrameworkCore.Database.Connection) 
      Opened connection to database 'Timesheet' on server 'localhost,1433'.
에서 말한 것처럼 이것은 특수한 성약 차원이다.공공 사무 관리 시스템(próxima mensage mostraque A transaço foi inicializada com o n jivel) ReadCommitted ,queéo padr o do SQL Server.
dbug: RelationalEventId.TransactionStarting[20209] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Beginning transaction with isolation level 'Unspecified'.
dbug: RelationalEventId.TransactionStarted[20200] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Began transaction with isolation level 'ReadCommitted'.
이것은 집행위원회에 관한 책INSERT으로 실체에 관한 책이다.코모오Id 생제르도 페로다도 은행, pode se verque, 파라 카다INSERT, 탐푸이 레알리자두움SELECT 파라오 EF Core obtenhao Id da entidade inserida.Alguns 로그에는 comandos와 Detect ço de altera çes de chave Estrangera foram omitidos가 기록되어 있습니다.
dbug: RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command) 
      Executing DbCommand [Parameters=[@p0='John Doe' (Size = 4000)], CommandType='Text', CommandTimeout='30']
      SET NOCOUNT ON;
      INSERT INTO [Employees] ([Name])
      VALUES (@p0);
      SELECT [Id]
      FROM [Employees]
      WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

dbug: RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command) 
      Executing DbCommand [Parameters=[@p1='3' (Nullable = true), @p2='12:00:00', @p3='08:00:00'], CommandType='Text', CommandTimeout='30']
      SET NOCOUNT ON;
      INSERT INTO [TimeEntries] ([EmployeeId], [End], [Start])
      VALUES (@p1, @p2, @p3);
      SELECT [Id]
      FROM [TimeEntries]
      WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();
보르티모, 에피토오commit가 사온에 이르렀다.
dbug: RelationalEventId.TransactionCommitting[20210] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Committing transaction.
dbug: RelationalEventId.TransactionCommitted[20202] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Committed transaction.

Controlando a transação


카소스 섬에 우리SaveChanges는 카란티르 섬의 소피시온트 섬에 담장이 하나 있다.Porém, quando necessário, es poss 胸vel controlar를 거래 안내서로 사용합니다.
O 실용성 테스트 O 최적 범례.Desa vez o métodoSaveChangesestásendo executado dentro de uma transaço iniciada com métodoBeginTransaction.
var employee = new Employee
{
      Name = "John Doe",
      Entries = new List<TimeEntry>
      {
            new TimeEntry
            {
                  Start = TimeSpan.FromHours(8),
                  End = TimeSpan.FromHours(12)
            }
      }
};
context.Add(employee);

using var transaction = context.Database.BeginTransaction();

context.SaveChanges();

transaction.Commit();
Primeira회사가 기록한 바와 같이 이것은 특수한 태평양 지역을 횡단하는 태평양 지역 회사ReadCommited이다.
dbug: RelationalEventId.TransactionStarting[20209] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Beginning transaction with isolation level 'Unspecified'.
dbug: RelationalEventId.TransactionStarted[20200] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Began transaction with isolation level 'ReadCommitted'.
집행관 옴베르토도SaveChanges, EF Core cria um savepoint da transaçAo invés de abrir uma transaçAo anhada.대체물 검사 로그.
dbug: CoreEventId.SaveChangesStarting[10004] (Microsoft.EntityFrameworkCore.Update) 
      SaveChanges starting for 'TestContext'.

dbug: RelationalEventId.CreatingTransactionSavepoint[20212] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Creating transaction savepoint.
dbug: RelationalEventId.CreatedTransactionSavepoint[20213] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Created transaction savepoint.
이것은 초보적인 테스트 형식이다.
dbug: RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command) 
      Executing DbCommand [Parameters=[@p0='John Doe' (Size = 4000)], CommandType='Text', CommandTimeout='30']
      SET NOCOUNT ON;
      INSERT INTO [Employees] ([Name])
      VALUES (@p0);
      SELECT [Id]
      FROM [Employees]
      WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

dbug: RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command) 
      Executing DbCommand [Parameters=[@p1='5' (Nullable = true), @p2='12:00:00', @p3='08:00:00'], CommandType='Text', CommandTimeout='30']
      SET NOCOUNT ON;
      INSERT INTO [TimeEntries] ([EmployeeId], [End], [Start])
      VALUES (@p1, @p2, @p3);
      SELECT [Id]
      FROM [TimeEntries]
      WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();
Por fim, ométodo 행정장관transaction.Commit()은 샌안토니오 확인서의 대체자로 쓰인다.
dbug: RelationalEventId.TransactionCommitting[20210] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Committing transaction.
dbug: RelationalEventId.TransactionCommitted[20202] (Microsoft.EntityFrameworkCore.Database.Transaction) 
      Committed transaction.

SQL Server를 사용하지 않는 데이터 저장소


SQL Server를 사용하지 않고 구성 요소로 거래하기만 하면 설계 과정에서 혼란을 피할 수 있습니다.OROLLBACK는 토다스를 샌안토니오의 거래로, NãO는 토다스를 샌안토니오의 거래로, OROLLBACK는 토다스를 샌안토니오의 거래BEGIN TRANSACTION의 오페라SAVE TRANSACTION로 각각 복원했다.
JáoROLLBACKcoloca uma tag no ponto desejado da transaço of forma a ser possível executar oSAVE TRANSACTIONe reverter as mudanças atéesse ponto.《부》잡지의 베레노스 저축점은 중요한 대서양 무역 기구CreateSavepoint의 새로운 대서양 무역 기구(novatransaço)이다.

EF 코어가 없는 Save Point


O EF Core também permite a criaçO manual de savepoints usando O métodoSAVE TRANSACTION.
using var transaction = context.Database.BeginTransaction();

context.Add(new Employee { Name = "John Doe" });
context.SaveChanges();

transaction.CreateSavepoint("A");

context.Add(new Employee { Name = "Jane Doe" });
context.SaveChanges();

transaction.Commit();

앞마당


EF 코어 5의 Save Point 기능이 없습니다.Nas versões 3.1 e 2.1 o EF Core,além de não permitir a criaão de savepoints de forma manual,também não executa umSaveChangesdurante a executa do métodoSaveChanges.예를 들어 아버타 강 연안에서 코모 세공도 테스터(como no segundo teste)는 보호벽을 바탕으로 개조한 집행 기구이다.

세인트폴


OmétodoSaveChanges는 집행자가 다른 은행에 대한 감독을 촉진시켰다. 그 밖에 이 은행은 거래 수첩에 대한 규정, OSaveChanges거래 저축점에 대한 규정을 포함하는 수첩을 제공했다.

증명하다

  • 간단한 로깅 - https://docs.microsoft.com/pt-br/ef/core/logging-events-diagnostics/simple-logging
  • Usando transaçes-https://docs.microsoft.com/pt-br/ef/core/saving/transactions
  • 거래 통제 지침https://docs.microsoft.com/pt-br/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql-server-ver15
  • 중첩된 트랜잭션 및 저장 트랜잭션 명령 - https://dba-presents.com/index.php/databases/sql-server/43-nesting-transactions-and-save-transaction-command
  • 트랜잭션 저장 - https://docs.microsoft.com/pt-br/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-ver15
  • https://github.com/dotnet/efcore/blob/release/5.0/src/EFCore.Relational/Update/Internal/BatchExecutor.cs#L89
  • https://github.com/dotnet/efcore/blob/release/2.1/src/EFCore.Relational/Update/Internal/BatchExecutor.cs#L70
  • 좋은 웹페이지 즐겨찾기