ObjectRepository - рдЕрдкрдиреЗ рдШрд░ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП .NET-рдЗрди-рдореЗрдореЛрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреИрдЯрд░реНрди

рдореЗрдореЛрд░реА рдореЗрдВ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рдХреНрдпреЛрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ?


рд╕рд╛рдЗрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдпрд╛ рдмреИрдХрдПрдВрдб рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордЭрджрд╛рд░ рд▓реЛрдЧреЛрдВ рдХреА рдкрд╣рд▓реА рдЗрдЪреНрдЫрд╛ рдПрдХ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реЛрдЧреАред


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


рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╕рд╣рдХрд░реНрдореА рддреНрд╡рд░рд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдкрдиреЗ N + 1 рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рддрд╛рдХрд┐ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ SELECT рдиреЗ рдЙрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛?


рдПрдХ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рджреГрд╖реНрдЯрд┐рдХреЛрдг NoSQL рд╣реИред рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рдЪрд╛рд░ рдерд╛ - рдХрд┐рд╕реА рднреА рдЕрд╡рд╕рд░ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ MongoDB рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдФрд░ json-document рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрддрд░реЛрдВ рдХрд╛ рдЖрдирдВрдж рд▓рд┐рдпрд╛ (рд╡реИрд╕реЗ, рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдкрд░рд┐рдкрддреНрд░ рд▓рд┐рдВрдХ рдХреЗ рдХрд╛рд░рдг рдХрд┐рддрдиреА рдмреИрд╕рд╛рдЦреА рдбрд╛рд▓рдиреА рдереА?) ред


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕реЗ рдордирдорд╛рдирд╛ рд╕реНрдЯреЛрд░реЗрдЬ (рдлрд╝рд╛рдЗрд▓, рд░рд┐рдореЛрдЯ рдбреЗрдЯрд╛рдмреЗрд╕) рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ?


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


рдкреЗрд╢реЗрд╡рд░реЛрдВ:


  • рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЖрд╕рд╛рди рд╣реЛрддреА рдЬрд╛ рд░рд╣реА рд╣реИ - рд╕рд╛рдзрд╛рд░рдг рд╕реА # рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ, рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ, рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ, рдУрдЖрд░рдПрдо рдлреАрдЪрд░реНрд╕;
  • рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдкрд╣реБрдВрдЪ рд╕реЗ рдЬреБрдбрд╝реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ;
  • рдмрд╣реБрдд рддреЗрдЬ - рдХреЛрдИ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз, рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рдХреЛрдб рдЕрдиреБрд╡рд╛рдж, рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдХреНрд░рдорд┐рдХ (рдбреА) рдирд╣реАрдВ;
  • рдпрд╣ рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ - рдХрдо рд╕реЗ рдХрдо XML рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░, рдХрдо рд╕реЗ рдХрдо SQL рд╕рд░реНрд╡рд░ рдореЗрдВ, рдХрдо рд╕реЗ рдХрдо рдПрдЬрд╝реНрдпреЛрд░ рдЯреЗрдмрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВред

рд╡рд┐рдкрдХреНрд╖:


  • рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдЦреЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╢реВрдиреНрдп рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
  • рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВред (рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрднреА рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╣реИ рдирд╛?)

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?


рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


  • рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдбреЗрдЯрд╛ рдЧреЛрджрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
  • рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓, рдкреНрд░рд╛рдердорд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ, рдФрд░ рд╕рдВрдмрдВрдз рд╕реВрдЪрдХрд╛рдВрдХ (1: 1, 1: рдХрдИ) рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ;
  • рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (INotifyPropertyChanged) рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ (INotifyCollectionChanged);
  • рдЬрдм рд╕рджрд╕реНрдпрддрд╛ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ - рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╡рд╕реНрддреБ рдХреЛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рд╕рдордп-рд╕рдордп рдкрд░ (рдЯрд╛рдЗрдорд░ рдХреЗ рджреНрд╡рд╛рд░рд╛), рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкреГрд╖реНрдарднреВрдорд┐ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ;
  • рдЬрдм рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рднреА рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдХреЛрдб рдЙрджрд╛рд╣рд░рдг


рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ
//   Install-Package OutCode.EscapeTeams.ObjectRepository    //  ,      //  ,   . Install-Package OutCode.EscapeTeams.ObjectRepository.File Install-Package OutCode.EscapeTeams.ObjectRepository.LiteDb Install-Package OutCode.EscapeTeams.ObjectRepository.AzureTableStorage    //  -       Hangfire // Install-Package OutCode.EscapeTeams.ObjectRepository.Hangfire 

рд╣рдо рдЙрд╕ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
 public class ParentEntity : BaseEntity {  public ParentEntity(Guid id) => Id = id; }  public class ChildEntity : BaseEntity {  public ChildEntity(Guid id) => Id = id;  public Guid ParentId { get; set; }  public string Value { get; set; } } 

рдлрд┐рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓:
 public class ParentModel : ModelBase {  public ParentModel(ParentEntity entity)  {    Entity = entity;  }    public ParentModel()  {    Entity = new ParentEntity(Guid.NewGuid());  }    //   1:Many  public IEnumerable<ChildModel> Children => Multiple<ChildModel>(x => x.ParentId);    protected override BaseEntity Entity { get; } }  public class ChildModel : ModelBase {  private ChildEntity _childEntity;    public ChildModel(ChildEntity entity)  {    _childEntity = entity;  }    public ChildModel()  {    _childEntity = new ChildEntity(Guid.NewGuid());  }    public Guid ParentId  {    get => _childEntity.ParentId;    set => UpdateProperty(() => _childEntity.ParentId, value);  }    public string Value  {    get => _childEntity.Value;    set => UpdateProperty(() => _childEntity.Value, value);  }    //       public ParentModel Parent => Single<ParentModel>(ParentId);    protected override BaseEntity Entity => _childEntity; } 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреНрд▓рд╛рд╕ рд╣реА:
 public class MyObjectRepository : ObjectRepositoryBase {  public MyObjectRepository(IStorage storage) : base(storage, NullLogger.Instance)  {    IsReadOnly = true; //  ,            AddType((ParentEntity x) => new ParentModel(x));    AddType((ChildEntity x) => new ChildModel(x));      //   Hangfire       Hangfire  ObjectRepository    // this.RegisterHangfireScheme();      Initialize();  } } 

ObjectRepository рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рдПрдБ:


 var memory = new MemoryStream(); var db = new LiteDatabase(memory); var dbStorage = new LiteDbStorage(db);  var repository = new MyObjectRepository(dbStorage); await repository.WaitForInitialize(); 

рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ HangFire рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреА
 public void ConfigureServices(IServiceCollection services, ObjectRepository objectRepository) {  services.AddHangfire(s => s.UseHangfireStorage(objectRepository)); } 

рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдбрд╛рд▓реЗрдВ:


 var newParent = new ParentModel() repository.Add(newParent); 

рдЗрд╕ рдХреЙрд▓ рдореЗрдВ, ParentModel рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдХреИрд╢ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░рд╛рдЗрдЯ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдСрдкрд░реЗрд╢рди O (1) рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рддреБрд░рдВрдд рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓реМрдЯреА рд╣реБрдИ рд╡рд╕реНрддреБ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 var parents = repository.Set<ParentModel>(); var myParent = parents.Find(newParent.Id); Assert.IsTrue(ReferenceEquals(myParent, newParent)); 

рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рд╕реЗрдЯ рдХрд░реЗрдВ <ParentModel> () рдПрдХ рдЯреЗрдмрд▓-рдмрд░реНрдб <ParentModel> рджреЗрддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╡рд░реНрддреА рдЫрд╛рдпрд╛рдХрд╛рд░рдХ <ParentModel, ParentModel> рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХ рдФрд░ рджреНрд╡рд┐рддреАрдпрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдИрдж (рдпрд╛ рдЕрдиреНрдп рдордирдорд╛рдирд╛ рдХрд╕реНрдЯрдо рдЕрдиреБрдХреНрд░рдорд┐рдд) рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ ObjectRepository рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧреБрдгреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рднреА рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓реЗрдЦрди рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдмрд╛рд╣рд░ рд╕реЗ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдПрдХ POCO рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ:


 myParent.Children.First().Property = "Updated value"; 

рдЖрдк рдирд┐рдореНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 repository.Remove(myParent); repository.RemoveRange(otherParents); repository.Remove<ParentModel>(x => !x.Children.Any()); 

рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдП рдЧрдП рдХрддрд╛рд░ рдореЗрдВ рднреА рдЬреЛрдбрд╝рддрд╛ рд╣реИред


рд╕рдВрд░рдХреНрд╖рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?


рдЯреНрд░реИрдХ рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рджреЛрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛ рд╣рдЯрд╛рдирд╛ рдпрд╛ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛) ModelChanged рдЗрд╡реЗрдВрдЯ рдХреЛ рдЙрдард╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ IStorage рдиреЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рд╣реИ ред рдЬрдм рдПрдХ ModelChanged рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ , рддреЛ IStorage рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди , 3 рдХрддрд╛рд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдЯрд╛рддреЗ рд╣реИрдВред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдирд┐рд╢рд┐рдпреЛрд░рд╢рди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЯрд╛рдЗрдорд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ 5 рд╕реЗрдХрдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реЗрд╡ рдХреЙрд▓ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ: ObjectRepository.Save () ред


рдкреНрд░рддреНрдпреЗрдХ рдмрдЪрдд рд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рд▓реЗ рдЕрд░реНрдерд╣реАрди рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХрддрд╛рд░реЛрдВ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдИрд╡реЗрдВрдЯ - рдЬрдм рдХреЛрдИ рд╡рд╕реНрддреБ рджреЛ рдмрд╛рд░ рдпрд╛ рддреНрд╡рд░рд┐рдд рдЬреЛрдбрд╝ / рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдмрджрд▓ рдЧрдИ рд╣реЛ), рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдмрдЪрдд рд╣реЛрддреА рд╣реИред


рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рдВрдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕рд╣рд┐рдд рдмрджрд▓реЗ рдЧрдП рдереЗред


рдФрд░ рдХреНрдпрд╛ рд╣реИ?


  • рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп .NET рдорд╛рдирдХ 2.0 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЖрдзреБрдирд┐рдХ .NET рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдПрдкреАрдЖрдИ рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЧреНрд░рд╣ рд╕рдорд╡рд░реНрддреА рдЫрд╛рдпрд╛рдВрдХрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдпрд╛ рддреЛ рддрд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
    рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рд╡рд╕реНрддреБ ObjectRepository.Save () рд╣реИ;
  • рдХрд╕реНрдЯрдо рдЕрдиреБрдХреНрд░рдорд┐рдд (рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ):

 repository.Set<ChildModel>().AddIndex(x => x.Value); repository.Set<ChildModel>().Find(x => x.Value, "myValue"); 

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреМрди рдХрд░ рд░рд╣рд╛ рд╣реИ?


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


рд▓реЗрдХрд┐рди рдЕрддреАрдд рдореЗрдВ, рдЬрдм рдПрд╕реНрдХреЗрдкрдЯреЗрдореНрд╕, рд╕реНрд╡рд░реНрдЧреАрдп рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк, рдЯреАрдо рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╡реЗ рдереЗ, рдкреИрд╕рд╛ - рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рдлрд┐рд░ рд╕реЗ рдЕрдиреБрднрд╡ ) - рдЙрдиреНрд╣реЛрдВрдиреЗ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬрд╝реНрдпреЛрд░ рдЯреЗрдмрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред


рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛


рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ - рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди (рд╕рд┐рдХ!) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдордЬрдмреВрдд-рдЗрдЪреНрдЫрд╛рд╢рдХреНрддрд┐ рд╡рд╛рд▓рд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрджрд▓рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП "рдЬреЛ рдЕрдВрддрд┐рдо рд╣реИ - рдЬреЛ рд╕рд╣реА рд╣реИред"


рддрдХрдиреАрдХреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИ:


  • рдЗрд╡реЗрдВрдЯ рдореЙрдбрд▓ рдХреА рдЬрдЧрд╣ EventLog рдФрд░ Snapshot рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ
  • рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ (рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ? рдЙрдбрдк рдЦреЛрдЬ? рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ / рджрд╛рд╕?
  • рдХрд┐рд╕реА рднреА рдЖрдо рд╕рд╣рдорддрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЬреИрд╕реЗ RAFT рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ EventLog рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░реЗрдВред

рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рднреА рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ - рдбрд┐рд▓реАрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ, рдпрд╛ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ред


рд╕реНрд░реЛрдд рдХреЛрдб


рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдБ рддрдХ рдкрдврд╝рддреЗ рд╣реИрдВ - рддреЛ рдХреЗрд╡рд▓ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рд╢реЗрд╖ рд╣реИ, рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЧрд┐рддреБрдм рдкрд░ рдкрд╛рдпрд╛ ред

Source: https://habr.com/ru/post/hi452232/


All Articles