рд╡рд┐рдпрдирд╛рдиреЗрдЯ: рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рднрд╛рдЧ 2

Raiffeisenbank .NET рдбреЗрд╡рд▓рдкрд░ рд╕рдореБрджрд╛рдп рд╡рд┐рдпрдирд╛рдиреЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рддрдХ рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ рдЖрдпреЗ, рдЖрдк рдкрд╣рд▓рд╛ рднрд╛рдЧ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ.

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди, рдХрддрд╛рд░реЛрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рддрдХ рдорд╛рдиреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╕реНрд░реЛрдд рдпрд╣рд╛рдБ рд╣реИрдВ), рдФрд░ рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдпрд╣рд╛рдБ.

рд╡рд┐рдпрдирд╛рдиреЗрдЯ: рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рднрд╛рдЧ 2

рд╡рд┐рдпрдирд╛рдиреЗрдЯ.рд╕рд╛рдЧрд╛рд╕

рдЬрдм рдХреЛрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбреАрдбреАрдбреА рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЬрдм рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдкрд░рд┐рджреГрд╢реНрдп рдЕрдХреНрд╕рд░ рдПрдХ рд╕рд╛рде рдХрдИ рдбреЛрдореЗрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдРрд╕реЗ рддрдВрддреНрд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░рд┐рд╕ рд░рд┐рдЪрд░реНрдбрд╕рди рдХреА рдкреБрд╕реНрддрдХ "рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкреИрдЯрд░реНрдиреНрд╕" рдореЗрдВ.

рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА рддрдВрддреНрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ: рдПрдХ рдЧрд╛рдерд╛, рдпрд╛ рдмрд▓реНрдХрд┐ рдПрдХ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди-рдЖрдзрд╛рд░рд┐рдд рдЧрд╛рдерд╛ред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдпрджрд┐ рдХрд┐рд╕реА рднреА рдЪрд░рдг рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдкрд┐рдЫрд▓реЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд░реЛрд▓рдмреИрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рд╣реИ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЧрд╛рдерд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╕рдлрд▓рддрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдореЗрдВ рд╕рднреА рдбреЛрдореЗрди рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ: рдмрд╕ рдЖрдзрд╛рд░ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ SagaBase<T> рдХрд╛ рд╡рдВрд╢рдЬ рдмрдирд╛рдПрдВ, рдЬрд╣рд╛рдВ T рдЖрдкрдХрд╛ рд╕рдВрджрд░реНрдн рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЧрд╛рдерд╛ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛, рд╕рд╛рде рд╣реА рдХреБрдЫ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╕рдВрджрд░реНрдн рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рднреА рдЪрд░рдгреЛрдВ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рдЧрд╛ рд╕реНрд╡рдпрдВ рдПрдХ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдбреАрдЖрдИ рдореЗрдВ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдЬреНрдЮрд╛рдкрди:

public class ExampleSaga : SagaBase<ExampleContext>
{
  public ExampleSaga()
  {
    Step("Step 1")
      .WithAction(c => ...)
      .WithCompensation(c => ...);
	
    AsyncStep("Step 2")
      .WithAction(async c => ...);
  }
}

рдЙрджрд╛рд╣рд░рдг рдХреЙрд▓:

var saga = new ExampleSaga();
var context = new ExampleContext();
await saga.Execute(context);

рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг.

рд╡рд┐рдпрдирд╛рдиреЗрдЯ.рдСрд░реНрдо.*

рдирд┐рдмрд░реНрдирдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рд╣рдо рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреАрдмреА-рдлрд░реНрд╕реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рддреИрдпрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред

ViennaNET.Orm.Seedwork ╨╕ ViennaNET.Orm - рдореБрдЦреНрдп рдЕрд╕реЗрдВрдмрд▓реА рдЬрд┐рдирдореЗрдВ рдХреНрд░рдорд╢рдГ рдмреБрдирд┐рдпрд╛рджреА рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдЗрдП рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВред

рдЕрдВрддрд░рд╛рдлрд▓рдХ IEntityFactoryService рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди EntityFactoryService рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдп рдХреА рдЗрдХрд╛рдИ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рд╕рд╛рде рд╣реА рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрдХ рдФрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдпрд╣рд╛рдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВред рдХрднреА-рдХрднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП IEntityFactoryService рдПрдХ рдкреВрд░реНрд╡рдЬ рд╣реИ - рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IEntityRepositoryFactory, рдЬреЛ рдХреЗрд╡рд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рддрд╛ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЯреАрдореЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ DBMS рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql.

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХрдИ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХрд┐рд╕реА рднреА рд▓рд╛рдЧрдд рдХреЗ рдмрд┐рдирд╛, рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ DBMS рд╕реЗ рджреВрд╕рд░реЗ DBMS. рдЖрд╡рд╢реНрдпрдХ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдФрд░, рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рддрд╛ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдореИрдкрд┐рдВрдЧ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ) рдХреЛ BoundedContext рд╡рд░реНрдЧ (рдбреЛрдореЗрди рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ) рдпрд╛ рдЙрд╕рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдореЗрдВ рдЗрдХрд╛рдИ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдХрд╛рдЗрдпреЛрдВ, рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ), рдЬрд╣рд╛рдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

"db": [
  {
    "nick": "mssql_connection",
    "dbServerType": "MSSQL",
    "ConnectionString": "...",
    "useCallContext": true
  },
  {
    "nick": "oracle_connection",
    "dbServerType": "Oracle",
    "ConnectionString": "..."
  }
],

рдЙрджрд╛рд╣рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ:

internal sealed class DbContext : ApplicationContext
{
  public DbContext()
  {
    AddEntity<SomeEntity>("mssql_connection");
    AddEntity<MigratedSomeEntity>("oracle_connection");
    AddEntity<AnotherEntity>("oracle_connection");
  }
}

рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдирд╛рдордХ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕реАрдзреА рдореИрдкрд┐рдВрдЧ рдорд╛рдирдХ NHibernet рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЖрдк рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ xml рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рджреЛрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реНрдЯрдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ ViennaNET.TestUtils.Orm.

рд╡рд┐рдпрдирд╛рдиреЗрдЯ.рдСрд░реНрдо.* рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ.

рд╡рд┐рдпрдирд╛рдиреЗрдЯ.рдореИрд╕реЗрдЬрд┐рдВрдЧ.*

рдХрддрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред

рдХрддрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд╕рдорд╛рди рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреН, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдПрдХреАрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп ViennaNET.Messaging рдЗрд╕ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ ViennaNET.Messaging.MQSeriesQueue, ViennaNET.Messaging.RabbitMQQueue ╨╕ ViennaNET.Messaging.KafkaQueue рдЗрд╕рдореЗрдВ рдХреНрд░рдорд╢рдГ IBM MQ, RabbitMQ рдФрд░ Kafka рдХреЗ рд▓рд┐рдП рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдХрддрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ: рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рднреЗрдЬрдирд╛ред

рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ. рдпрд╣рд╛рдВ 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХрд▓ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХрддрд╛рд░ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ IMessageProcessor, рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрддрд╛рд░ рд╕реЗ "рд▓рд┐рдВрдХ" рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдпрд╣ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ IQueueReactorFactory рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдХрддрд╛рд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛:

"messaging": {
    "ApplicationName": "MyApplication"
},
"rabbitmq": {
    "queues": [
      {
        "id": "myQueue",
        "queuename": "lalala",
        ...
      }
    ]
},

рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

_queueReactorFactory.Register<MyMessageProcessor>("myQueue");
var queueReactor = queueReactorFactory.CreateQueueReactor("myQueue");
queueReactor.StartProcessing();

рдлрд┐рд░, рдЬрдм рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрддрд╛рд░ рд╕реЗ рд╕рднреА рд╕рдВрджреЗрд╢ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред

рдлрд╝реИрдХреНрдЯрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХрд▓ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IMessagingComponentFactory рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ CreateMessageReceiverрдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдмрдирд╛рдПрдЧрд╛:

using (var receiver = _messagingComponentFactory.CreateMessageReceiver<TestMessage>("myQueue"))
{
    var message = receiver.Receive();
}

рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ IMessagingComponentFactory рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░реЗрд╖рдХ рдмрдирд╛рдПрдВ:

using (var sender = _messagingComponentFactory.CreateMessageSender<MyMessage>("myQueue"))
{
    sender.SendMessage(new MyMessage { Value = ...});
}

рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдФрд░ рдбреАрд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рддреИрдпрд╛рд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдХреЗрд╡рд▓ рдЯреЗрдХреНрд╕реНрдЯ, XML рдФрд░ JSON, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ IMessageSerializer ╨╕ IMessageDeserializer.

рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрдХ рдХреА рдЕрджреНрд╡рд┐рддреАрдп рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛. ViennaNET.Messaging.MQSeriesQueue рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдЯреЗрдХреНрд╕реНрдЯ, рдмрд▓реНрдХрд┐ рдмрд╛рдЗрдЯ рд╕рдВрджреЗрд╢ рднреА рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ViennaNET.Messaging.RabbitMQQueue рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдСрди-рдж-рдлрд╝реНрд▓рд╛рдИ рдХрддрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред RabbitMQ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдПрдбреЙрдкреНрдЯрд░ рд░реИрдкрд░ RPC рдХреЗ рдХреБрдЫ рдЕрдВрд╢реЛрдВ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: рд╣рдо рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрд╕реНрдерд╛рдпреА рдХрддрд╛рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИред

рдпрд╣рд╛рдВ рдмреБрдирд┐рдпрд╛рджреА рдХрдиреЗрдХреНрд╢рди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг.

рд╡рд┐рдпрдирд╛рдиреЗрдЯ.рдХреЙрд▓рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ

рд╣рдо рдХрддрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рднреА рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧрд╛рдерд╛ рдХреЗ рднреАрддрд░ред рдЗрд╕рд╕реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди, рдПрдВрдб-рдЯреВ-рдПрдВрдб рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рд╕реНрд░реЛрдд рдЖрдИрдкреА рдкрддрд╛ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдбреЗрдЯрд╛ рдЬреИрд╕реЗ рд╕рд╣рд╛рдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реБрдИред рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЕрдЧреНрд░реЗрд╖рдг рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ ViennaNET.CallContext, рдЬреЛ рдЖрдкрдХреЛ рд╕реЗрд╡рд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдХрддрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рдлрд┐рд░, рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдЕрдиреБрд░реЛрдз рдпрд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрджрд░реНрдн рд╕реЗ рдбреЗрдЯрд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣реЗрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдЧрд▓реА рд╕реЗрд╡рд╛ рд╕рд╣рд╛рдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреА рд╣реИред

рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ!

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ