เชฎเซเชฎเชฐเซเชฎเชพเช เชฌเชงเซ เชกเซเชเชพ เชถเชพ เชฎเชพเชเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเซ?
เชตเซเชฌเชธเชพเชเช เช เชฅเชตเชพ เชฌเซเชเชเชจเซเชก เชกเซเชเชพ เชธเซเชเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ, เชฎเซเชเชพเชญเชพเชเชจเชพ เชธเชฎเชเชฆเชพเชฐ เชฒเซเชเซเชจเซ เชชเซเชฐเชฅเชฎ เชเชเซเชเชพ SQL เชกเซเชเชพเชฌเซเช เชชเชธเชเชฆ เชเชฐเชตเชพเชจเซ เชนเชถเซ.
เชชเชฐเชเชคเซ เชเซเชเชฒเซเชเชตเชพเชฐ เชฎเชจเชฎเชพเช เชตเชฟเชเชพเชฐ เชเชตเซ เชเซ เชเซ เชกเซเชเชพ เชฎเซเชกเซเชฒ SQL เชฎเชพเชเซ เชฏเซเชเซเชฏ เชจเชฅเซ: เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชถเซเชง เช เชฅเชตเชพ เชธเชพเชฎเชพเชเชฟเช เชเซเชฐเชพเชซ เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ, เชคเชฎเชพเชฐเซ เชเชฌเซเชเซเชเซเชเซเชธ เชตเชเซเชเซเชจเชพ เชเชเชฟเชฒ เชธเชเชฌเชเชงเซ เชถเซเชงเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชธเซเชฅเซ เชเชฐเชพเชฌ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เช เชเซ เชเซ เชเซเชฏเชพเชฐเซ เชคเชฎเซ เชเซเชฎเชฎเชพเช เชเชพเชฎ เชเชฐเซ เชเซ เช เชจเซ เชธเชพเชฅเซเชฆเชพเชฐเชจเซ เชเชฌเชฐ เชจเชฅเซ เชนเซเชคเซ เชเซ เชเชกเชชเซ เชชเซเชฐเชถเซเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชฌเชจเชพเชตเชตเซเช. เชคเชฎเซ N+1 เชธเชฎเชธเซเชฏเชพเช เชเชเซเชฒเชตเชพเชฎเชพเช เช เชจเซ เชตเชงเชพเชฐเชพเชจเชพ เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเช เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเซเชเชฒเซ เชธเชฎเชฏ เชชเชธเชพเชฐ เชเชฐเซเชฏเซ เชนเชคเซ เชเซเชฅเซ เชฎเซเชเซเชฏ เชชเซเชทเซเช เชชเชฐเชจเซเช SELECT เชฏเซเชเซเชฏ เชธเชฎเชฏเชฎเชพเช เชชเซเชฐเซเชฃ เชฅเชพเชฏ?
เช เชจเซเชฏ เชฒเซเชเชชเซเชฐเชฟเชฏ เช เชญเชฟเชเชฎ NoSQL เชเซ. เชเซเชเชฒเชพเชเช เชตเชฐเซเชทเซ เชชเชนเซเชฒเชพ เช เชตเชฟเชทเชฏเชจเซ เชเชธเชชเชพเชธ เชเชฃเซ เชนเชพเชเชช เชนเชคเซ - เชเซเชเชชเชฃ เช เชจเซเชเซเชณ เชชเซเชฐเชธเชเช เชฎเชพเชเซ เชคเซเชเช เชฎเซเชเชเซเชกเซเชฌเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชนเชคเซ เช เชจเซ เชเซเชธเชจ เชฆเชธเซเชคเชพเชตเซเชเซเชจเชพ เชฐเซเชชเชฎเชพเช เชเชตเชพเชฌเซเชฅเซ เชเซเชถ เชนเชคเชพ. (เชฌเชพเชฏ เชง เชตเซ, เชกเซเชเซเชฏเซเชฎเซเชจเซเชเซเชธเชฎเชพเช เชเซเชณเชพเชเชพเชฐ เชฒเชฟเชเชเซเชธเชจเซ เชเชพเชฐเชฃเซ เชคเชฎเชพเชฐเซ เชเซเชเชฒเซ เชเซเชฐเซเช เชฆเชพเชเชฒ เชเชฐเชตเซ เชชเชกเซ?).
เชนเซเช เชฌเซเชเซ, เชตเซเชเชฒเซเชชเชฟเช เชชเชฆเซเชงเชคเชฟ เช เชเชฎเชพเชตเชตเชพเชจเซเช เชธเซเชเชจ เชเชฐเซเช เชเซเช - เชถเชพ เชฎเชพเชเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเซเชฎเชฐเซเชฎเชพเช เชคเชฎเชพเชฎ เชกเซเชเชพเชจเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชจ เชเชฐเซ, เชธเชฎเชฏเชพเชเชคเชฐเซ เชคเซเชจเซ เชฐเซเชจเซเชกเชฎ เชธเซเชเซเชฐเซเช (เชซเชพเชเชฒ, เชฐเชฟเชฎเซเช เชกเซเชเชพเชฌเซเช) เชชเชฐ เชธเชพเชเชตเซ?
เชฎเซเชฎเชฐเซ เชธเชธเซเชคเซ เชฅเช เชเช เชเซ, เช
เชจเซ เชฎเซเชเชพเชญเชพเชเชจเชพ เชจเชพเชจเชพ เช
เชจเซ เชฎเชงเซเชฏเชฎ เชเชฆเชจเชพ เชชเซเชฐเซเชเซเชเซเชเซเชธ เชฎเชพเชเซ เชเซเชเชชเชฃ เชธเชเชญเชตเชฟเชค เชกเซเชเชพ 1 GB เชฎเซเชฎเชฐเซเชฎเชพเช เชซเชฟเช เชฅเชถเซ. (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฎเชพเชฐเซ เชชเซเชฐเชฟเชฏ เชนเซเชฎ เชชเซเชฐเซเชเซเชเซเช เชเซ
เชเซเชฃ:
- เชกเซเชเชพเชจเซ เชเชเซเชธเซเชธ เชธเชฐเชณ เชฌเชจเซ เชเซ - เชคเชฎเชพเชฐเซ เชชเซเชฐเชถเซเชจเซ, เชเชณเชธเซ เชฒเซเชกเชฟเชเช, ORM เชธเซเชตเชฟเชงเชพเช เชตเชฟเชถเซ เชเชฟเชเชคเชพ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ, เชคเชฎเซ เชธเชพเชฎเชพเชจเซเชฏ C# เชเชฌเซเชเซเชเซเชเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชเซ;
- เชตเชฟเชตเชฟเชง เชฅเซเชฐเซเชกเซเชจเซ เชเชเซเชธเซเชธ เชธเชพเชฅเซ เชธเชเชเชณเชพเชฏเซเชฒเซ เชเซเช เชธเชฎเชธเซเชฏเชพ เชจเชฅเซ;
- เชเซเชฌ เช เชเชกเชชเซ - เชเซเช เชจเซเชเชตเชฐเซเช เชตเชฟเชจเชเชคเซเช เชจเชนเซเช, เชเซเชตเซเชฐเซ เชญเชพเชทเชพเชฎเชพเช เชเซเชกเชจเซเช เชเซเช เชญเชพเชทเชพเชเชคเชฐ เชจเชนเซเช, เชเชฌเซเชเซเชเซเชเชจเชพ (de)เชเซเชฐเชฎเซเชเชฐเชฃเชจเซ เชเชฐเซเชฐ เชจเชฅเซ;
- เชคเซ เชเซเชเชชเชฃ เชธเซเชตเชฐเซเชชเชฎเชพเช เชกเซเชเชพ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชตเซเชเชพเชฐเซเชฏ เชเซ - เชคเซ เชกเชฟเชธเซเช เชชเชฐ XMLเชฎเชพเช เชนเซเชฏ, เช เชฅเชตเชพ SQL เชธเชฐเซเชตเชฐเชฎเชพเช เชนเซเชฏ, เช เชฅเชตเชพ Azure เชเซเชฌเชฒ เชธเซเชเซเชฐเซเชเชฎเชพเช เชนเซเชฏ.
เชตเชฟเชชเชเซเชท:
- เชเชกเซเช เชธเซเชเซเชฒเชฟเชเช เชเซเชตเชพเช เชเชฏเซเช เชเซ, เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎเซ, เชถเซเชจเซเชฏ เชกเชพเชเชจเชเชพเชเชฎ เชเชฎเชพเชตเช เชเชฐเซ เชถเชเชพเชคเซ เชจเชฅเซ;
- เชเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซเชฐเซเชถ เชฅเชพเชฏ เชเซ, เชคเซ เชคเชฎเซ เชเชเชถเชฟเช เชฐเซเชคเซ เชกเซเชเชพ เชเซเชฎเชพเชตเซ เชถเชเซ เชเซ. (เชชเชฐเชเชคเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซเชฏเชพเชฐเซเชฏ เชเซเชฐเซเชถ เชฅเชคเซ เชจเชฅเซ, เชฌเชฐเชพเชฌเชฐ?)
เชคเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ?
เช เชฒเซเชเซเชฐเชฟเชงเชฎ เชจเซเชเซ เชฎเซเชเชฌ เชเซ:
- เชถเชฐเซเชเชคเชฎเชพเช, เชกเซเชเชพ เชธเซเชเซเชฐเซเช เชธเชพเชฅเซ เชเชจเซเชเซเชถเชจ เชธเซเชฅเชพเชชเชฟเชค เชฅเชพเชฏ เชเซ, เช เชจเซ เชกเซเชเชพ เชฒเซเชก เชฅเชพเชฏ เชเซ;
- เชเชฌเซเชเซเชเซเช เชฎเซเชกเชฒ, เชชเซเชฐเชพเชฅเชฎเชฟเช เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเช เช เชจเซ เชฐเชฟเชฒเซเชถเชจเชฒ เชเชจเซเชกเซเชเซเชธ (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());
}
public Guid? NullableId => null;
// ะัะธะผะตั ัะฒัะทะธ 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();
เชเซ เชชเซเชฐเซเชเซเชเซเช เชนเซเชเชเชซเชพเชฏเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเชถเซ
public void ConfigureServices(IServiceCollection services, ObjectRepository objectRepository)
{
services.AddHangfire(s => s.UseHangfireStorage(objectRepository));
}
เชจเชตเซ เชเชฌเซเชเซเชเซเช เชฆเชพเชเชฒ เชเชฐเชตเซเช:
var newParent = new ParentModel()
repository.Add(newParent);
เช เชเซเชฒ เชธเชพเชฅเซ, เชชเชฆเชพเชฐเซเชฅ เชชเซเชฐเชจเซเช เชฎเซเชกเชฒ เชกเซเชเชพเชฌเซเชเชฎเชพเช เชฒเชเชตเชพ เชฎเชพเชเซ เชธเซเชฅเชพเชจเชฟเช เชเซเชถ เช เชจเซ เชเชคเชพเชฐ เชฌเชเชจเซเชฎเชพเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชคเซเชฅเซ, เช เชเชชเชฐเซเชถเชจ O(1) เชฒเซ เชเซ, เช เชจเซ เช เชเชฌเซเชเซเชเซเช เชธเชพเชฅเซ เชคเชฐเชค เช เชเชพเชฎ เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเช เช เชเชฌเซเชเซเชเซเช เชถเซเชงเชตเชพ เช เชจเซ เชเชเชพเชธเชตเชพ เชฎเชพเชเซ เชเซ เชชเชฐเชค เชเชฐเซเชฒ เชเชฌเซเชเซเชเซเช เช เช เชเชฆเชพเชนเชฐเชฃ เชเซ:
var parents = repository.Set<ParentModel>();
var myParent = parents.Find(newParent.Id);
Assert.IsTrue(ReferenceEquals(myParent, newParent));
เชถเซเช เชฅเชฏเซเช? เชธเซเช () เชชเชฐเชค เชเชฐเซ เชเซ เชเซเชทเซเชเช เชถเชฌเซเชฆเชเซเชถ, เชเซเชฎเชพเช เชธเชฎเชพเชตเซ เชเซ เชธเชฎเชตเชฐเซเชคเซ เชถเชฌเซเชฆเชเซเชถ เช เชจเซ เชชเซเชฐเชพเชฅเชฎเชฟเช เช เชจเซ เชเซเชฃ เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเชเชจเซ เชตเชงเชพเชฐเชพเชจเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เช เชคเชฎเชจเซ เชคเชฎเชพเชฎ เชเชฌเซเชเซเชเซเชเซเชธ เชชเชฐ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เชเชฐเซเชฏเชพ เชตเชฟเชจเชพ Id (เช เชฅเชตเชพ เช เชจเซเชฏ เชฎเชจเชธเซเชตเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเช) เชฆเซเชตเชพเชฐเชพ เชถเซเชงเชตเชพ เชฎเชพเชเซเชจเซ เชชเชฆเซเชงเชคเชฟเชเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ.
เชเซเชฏเชพเชฐเซ เชตเชธเซเชคเซเช เชเชฎเซเชฐเซ เชฐเชนเซเชฏเชพ เชนเซเชฏ ObjectRepository เชคเซเชฎเชจเซ เชชเซเชฐเซเชชเชฐเซเชเซเช เชฌเชฆเชฒเชตเชพ เชฎเชพเชเซ เชธเชฌเชธเซเชเซเชฐเชฟเชชเซเชถเชจ เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฅเซ เชชเซเชฐเซเชชเชฐเซเชเซเชฎเชพเช เชเซเชเชชเชฃ เชซเซเชฐเชซเชพเชฐ เชชเชฃ เช เชเชฌเซเชเซเชเซเชเชจเซ เชฐเชพเชเช เชเชคเชพเชฐเชฎเชพเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชชเชฐเชฟเชฃเชฎเซ เชเซ.
เชฌเชนเชพเชฐเชฅเซ เชชเซเชฐเซเชชเชฐเซเชเซเช เช
เชชเชกเซเช เชเชฐเชตเซ เช POCO เชเชฌเซเชเซเชเซเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชเซเชตเซเช เช เชฒเชพเชเซ เชเซ:
myParent.Children.First().Property = "Updated value";
เชคเชฎเซ เชจเซเชเซเชจเซ เชฐเซเชคเซ เชเชฌเซเชเซเชเซเช เชเชพเชขเซ เชถเชเซ เชเซ:
repository.Remove(myParent);
repository.RemoveRange(otherParents);
repository.Remove<ParentModel>(x => !x.Children.Any());
เช เชเชฌเซเชเซเชเซเชเชจเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชจเซ เชเชคเชพเชฐเชฎเชพเช เชชเชฃ เชเชฎเซเชฐเซ เชเซ.
เชฌเชเชค เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ?
ObjectRepository เชเซเชฏเชพเชฐเซ เชฎเซเชจเชฟเชเชฐ เชเชฐเซเชฒ เชเชฌเซเชเซเชเซเชเซเชธ เชฌเชฆเชฒเชพเชฏ เชเซ (เชเซเชฏเชพเช เชคเซ เชเชฎเซเชฐเชตเซเช เช เชฅเชตเชพ เชเชพเชขเซ เชจเชพเชเชตเซเช, เช เชฅเชตเชพ เชเซเชฃเชงเชฐเซเชฎเซ เชฌเชฆเชฒเชตเซเช), เชเชเชจเชพ เชเชญเซ เชเชฐเซ เชเซ เชฎเซเชกเชฒ เชฌเชฆเชฒเชพเชฏเซเชฒเชชเชฐ เชธเชฌเซเชธเซเชเซเชฐเชพเชเชฌ เชเชฐเซเชฏเซเช ISstorage. เช เชฎเชฒเซเชเชฐเชฃเซ ISstorage เชเซเชฏเชพเชฐเซ เชเซเช เชเชเชจเชพ เชฌเชจเซ เชเซ เชฎเซเชกเชฒ เชฌเชฆเชฒเชพเชฏเซเชฒ เชซเซเชฐเชซเชพเชฐเซเชจเซ 3 เชเชคเชพเชฐเซเชฎเชพเช เชฎเซเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ - เชเชฎเซเชฐเชตเชพ เชฎเชพเชเซ, เช เชชเชกเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เช เชจเซ เชเชพเชขเซ เชจเชพเชเชตเชพ เชฎเชพเชเซ.
เช เชฎเชฒเซเชเชฐเชฃเซ เชชเชฃ ISstorage เชเชฐเชเชญ เชชเชฐ, เชคเซเช เชเช เชเชพเชเชฎเชฐ เชฌเชจเชพเชตเซ เชเซ เชเซเชจเชพ เชเชพเชฐเชฃเซ เชฆเชฐ 5 เชธเซเชเชจเซเชกเซ เชซเซเชฐเชซเชพเชฐเซ เชธเชพเชเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชตเชงเซเชฎเชพเช, เชธเซเชต เชเซเชฒเชจเซ เชฆเชฌเชพเชฃ เชเชฐเชตเชพ เชฎเชพเชเซ เชเช API เชเซ: ObjectRepository.Save().
เชฆเชฐเซเช เชธเซเชต เชชเชนเซเชฒเชพเช, เช เชฐเซเชฅเชนเซเชจ เชเชชเชฐเซเชถเชจเซเชธ เชเชคเชพเชฐเชฎเชพเชเชฅเซ เชชเซเชฐเชฅเชฎ เชฆเซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชกเซเชชเซเชฒเชฟเชเซเช เชเชตเซเชจเซเชเซเชธ - เชเซเชฏเชพเชฐเซ เชเชฌเซเชเซเชเซเช เชฌเซ เชตเชพเชฐ เชฌเชฆเชฒเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ เช เชฅเชตเชพ เชเชฌเซเชเซเชเซเชเชจเซ เชเชกเชชเชฅเซ เชเชฎเซเชฐเชตเชพ/เชฆเซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ), เช เชจเซ เชฎเชพเชคเซเชฐ เชคเซเชฏเชพเชฐเซ เช เชธเชพเชเชตเซ.
เชคเชฎเชพเชฎ เชเซเชธเซเชฎเชพเช, เชธเชฎเชเซเชฐ เชตเชฐเซเชคเชฎเชพเชจ เชเชฌเซเชเซเชเซเช เชธเชพเชเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฅเซ เชถเชเซเชฏ เชเซ เชเซ เชเชฌเซเชเซเชเซเชเชจเซ เชเชคเชพเชฐเชฎเชพเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชนเชคเชพ เชคเซเชจเชพ เชเชฐเชคเชพเช เชเชฌเซเชเซเชเซเชเชจเชพ เชจเชตเชพ เชธเชเชธเซเชเชฐเชฃเซ เชธเชนเชฟเชค, เชคเซเช เชฌเชฆเชฒเชพเชฏเชพ เชนเชคเชพ เชคเซเชจเชพ เชเชฐเชคเชพเช เช เชฒเช เชเซเชฐเชฎเชฎเชพเช เชธเชพเชเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชฌเซเชเซเช เชถเซเช เชเซ?
- เชคเชฎเชพเชฎ เชชเซเชธเซเชคเชเชพเชฒเชฏเซ .NET เชงเซเชฐเชฃ 2.0 เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ. เชเซเชเชชเชฃ เชเชงเซเชจเชฟเช .NET เชชเซเชฐเซเชเซเชเซเชเชฎเชพเช เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ.
- API เชฅเซเชฐเซเชก เชธเชฒเชพเชฎเชค เชเซ. เชเชเชคเชฐเชฟเช เชธเชเชเซเชฐเชนเซ เชชเชฐ เชเชงเชพเชฐเชฟเชค เช
เชฎเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชธเชฎเชตเชฐเซเชคเซ เชถเชฌเซเชฆเชเซเชถ, เชเชตเซเชจเซเช เชนเซเชจเซเชกเชฒเชฐ เชชเชพเชธเซ เชเชพเช เชคเซ เชคเชพเชณเชพเช เชนเซเชฏ เชเซ เช
เชฅเชตเชพ เชคเซเชฎเชจเซ เชเชฐเซเชฐ เชนเซเชคเซ เชจเชฅเซ.
เชฏเชพเชฆ เชฐเชพเชเชตเชพ เชเซเชตเซ เชตเชธเซเชคเซ เชฎเชพเชคเซเชฐ เชเซเชฒ เชเชฐเชตเชพเชจเซ เชเซ ObjectRepository.Save(); - เชฎเชจเชธเซเชตเซ เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเช (เชตเชฟเชถเชฟเชทเซเชเชคเชพเชจเซ เชเชฐเซเชฐ เชเซ):
repository.Set<ChildModel>().AddIndex(x => x.Value);
repository.Set<ChildModel>().Find(x => x.Value, "myValue");
เชคเซเชจเซ เชเชชเชฏเซเช เชเซเชฃ เชเชฐเซ เชเซ?
เชตเซเชฏเชเซเชคเชฟเชเชค เชฐเซเชคเซ, เชฎเซเช เชคเชฎเชพเชฎ เชนเซเชฌเซ เชชเซเชฐเซเชเซเชเซเชเซเชธเชฎเชพเช เช เช เชญเชฟเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช เชเชพเชฐเชฃ เชเซ เชคเซ เช เชจเซเชเซเชณ เชเซ เช เชจเซ เชกเซเชเชพ เชเชเซเชธเซเชธ เชฒเซเชฏเชฐ เชฒเชเชตเชพ เช เชฅเชตเชพ เชญเชพเชฐเซ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซ เชฎเซเชเชพ เชเชฐเซเชเชจเซ เชเชฐเซเชฐ เชจเชฅเซ. เชตเซเชฏเชเซเชคเชฟเชเชค เชฐเซเชคเซ, litedb เช เชฅเชตเชพ เชซเชพเชเชฒเชฎเชพเช เชกเซเชเชพ เชธเซเชเซเชฐ เชเชฐเชตเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชฎเชพเชฐเชพ เชฎเชพเชเซ เชชเซเชฐเชคเซ เชเซ.
เชชเชฐเชเชคเซ เชญเซเชคเชเชพเชณเชฎเชพเช, เชเซเชฏเชพเชฐเซ เชนเชตเซ เชจเชฟเชทเซเชเซเชฐเชฟเชฏ เชธเซเชเชพเชฐเซเชเช เชช EscapeTeems (เชฎเซเช เชตเชฟเชเชพเชฐเซเชฏเซเช เชเซ เชคเซ เช เชนเซเช เชเซ, เชชเซเชธเชพ - เชชเชฃ เชจเชพ, เชซเชฐเซเชฅเซ เช เชจเซเชญเชต เชเชฐเซ) - Azure เชเซเชฌเชฒ เชธเซเชเซเชฐเซเชเชฎเชพเช เชกเซเชเชพ เชธเซเชเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เชตเชชเชฐเชพเชฏ เชเซ.
เชญเชตเชฟเชทเซเชฏเชจเซ เชฏเซเชเชจเชพเช
เชนเซเช เช เช เชญเชฟเชเชฎเชจเชพ เชฎเซเชเซเชฏ เชเซเชฐเชซเชพเชฏเชฆเชพเชฎเชพเชเชจเชพ เชเชเชจเซ เช เซเช เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช - เชเชกเซ เชธเซเชเซเชฒเชฟเชเช. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชเชพเช เชคเซ เชตเชฟเชคเชฐเชฟเชค เชตเซเชฏเชตเชนเชพเชฐเซเชจเซ เชเชฐเซเชฐ เชเซ (sic!), เช เชฅเชตเชพ เชฎเชเชฌเซเชค-เชเชเซเชเชพเชฅเซ เชจเชฟเชฐเซเชฃเชฏ เชฒเซเชตเซ เชเซเชเช เชเซ เชเซเชฆเชพ เชเซเชฆเชพ เชฆเชพเชเชฒเชพเชเชฎเชพเชเชฅเซ เชธเชฎเชพเชจ เชกเซเชเชพ เชฌเชฆเชฒเชตเซ เชเซเชเช เชจเชนเซเช, เช เชฅเชตเชพ "เชเซเชฒเซเชฒเซเช เชเซเชฃ เชธเชพเชเซเช เชเซ" เชจเชพ เชธเชฟเชฆเซเชงเชพเชเชค เช เชจเซเชธเชพเชฐ เชคเซเชจเซ เชฌเชฆเชฒเชตเชพ เชฆเซ.
เชคเชเชจเซเชเซ เชฆเซเชทเซเชเชฟเชเซเชฃเชฅเซ, เชนเซเช เชจเซเชเซเชจเซ เชฏเซเชเชจเชพเชจเซ เชถเชเซเชฏ เชเซเชเช เชเซเช:
- เชเชฌเซเชเซเชเซเช เชฎเซเชกเชฒเชจเซ เชฌเชฆเชฒเซ เชเชตเซเชจเซเชเชฒเซเช เช เชจเซ เชธเซเชจเซเชชเชถเซเช เชธเซเชเซเชฐ เชเชฐเซ
- เช เชจเซเชฏ เชเชฆเชพเชนเชฐเชฃเซ เชถเซเชงเซ (เชธเซเชเชฟเชเชเซเชธเชฎเชพเช เชคเชฎเชพเชฎ เชเชฆเชพเชนเชฐเชฃเซเชจเชพ เช เชเชคเชฟเชฎ เชฌเชฟเชเชฆเซเช เชเชฎเซเชฐเซ? udp เชถเซเชง? เชฎเชพเชธเซเชเชฐ/เชธเซเชฒเซเชต?)
- เชเซเชเชชเชฃ เชธเชฐเซเชตเชธเชเชฎเชคเชฟ เช เชฒเซเชเซเชฐเชฟเชงเชฎ, เชเซเชฎ เชเซ RAFT เชฆเซเชตเชพเชฐเชพ EventLog เชเชฆเชพเชนเชฐเชฃเซ เชตเชเซเชเซ เชจเชเชฒ เชเชฐเซ.
เชคเซเชฏเชพเช เชฌเซเชเซ เชธเชฎเชธเซเชฏเชพ เชชเชฃ เชเซ เชเซ เชฎเชจเซ เชเชฟเชเชคเชพ เชเชฐเซ เชเซ - เชเชพเชธเซเชเซเชก เชเชพเชขเซ เชจเชพเชเชตเซเช, เช เชฅเชตเชพ เช เชจเซเชฏ เชเชฌเซเชเซเชเซเชเซเชธเชฎเชพเชเชฅเซ เชฒเชฟเชเชเซเชธ เชงเชฐเชพเชตเชคเชพ เชเชฌเซเชเซเชเซเชเซเชธเชจเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชจเชพ เชเซเชธเซเชจเซ เชถเซเชง.
เชธเซเชฐเซเชค
เชเซ เชคเชฎเซ เช
เชนเซเช เชธเซเชงเซ เชเชเซ เชฐเซเชคเซ เชตเชพเชเชเซ เชฒเซเชงเซเช เชนเซเชฏ, เชคเซ เชเซ เชฌเชพเชเซ เชเซ เชคเซ เชเซเชก เชตเชพเชเชเชตเชพเชจเซเช เชเซ; เชคเซ GitHub เชชเชฐ เชฎเชณเซ เชถเชเซ เชเซ:
เชธเซเชฐเซเชธ: www.habr.com