项目作者: hidenami-i

项目描述 :
In Memory Database for Unity
高级语言: C#
项目地址: git://github.com/hidenami-i/IMDB4Unity.git
创建时间: 2019-08-09T04:16:10Z
项目社区:https://github.com/hidenami-i/IMDB4Unity

开源协议:Other

下载


IMDB4Unity

In Memory Database for Unity

Usage

Install

Add the following line on Packages/manifest.json file.

  1. "com.hidenami-i.imdb4unity": "https://github.com/hidenami-i/IMDB4Unity.git",
  2. "com.hidenami-i.unityextensions": "https://github.com/hidenami-i/UnityExtensions.git",

Basic

  1. MasterCharacterEntity knight = new MasterCharacterEntity(1, "Knight", "Knight Desc", CharacterType.Knight, DateTime.Now);
  2. MasterCharacterEntity magician = new MasterCharacterEntity(1, "Magician", "Magician Desc", CharacterType.Magician, DateTime.Now);
  3. MasterCharacterEntity monster = new MasterCharacterEntity(1, "Monster", "Monster Desc", CharacterType.Monster, DateTime.Now);
  4. MasterCharacterRepository.Instance.InsertAll(knight, magician, monster);
  5. MasterCharacterRepository.Instance.Save();
  6. MasterCharacterRepository.Instance.Load();
  7. MasterCharacterRepository.Instance.LogAllEntity();
  8. UserEntity user = new UserEntity(1, "ABCDE");
  9. UserDataMapper.Instance.Update(user);
  10. UserDataMapper.Instance.Save();
  11. UserDataMapper.Instance.Load();
  12. if (UserDataMapper.Instance.TryGet(out user)) {
  13. Debug.Log(user.ToString());
  14. }

Classes

Entity

  1. using UnityEngine;
  2. using System;
  3. using System.Text;
  4. namespace IMDB4Unity.Tests
  5. {
  6. [Serializable]
  7. public class MasterCharacterEntity : EntityBase
  8. {
  9. [SerializeField] private int id;
  10. [SerializeField] private string name;
  11. [SerializeField] private string description;
  12. [SerializeField] private CharacterType typeId;
  13. // DateTime class can not serialize. So define it as a string.
  14. [SerializeField] private string createdAt;
  15. public int Id => id;
  16. public string Name => name;
  17. public string Description => description;
  18. public CharacterType TypeId => typeId;
  19. // Datetime cache.
  20. public DateTime? CreatedAt {
  21. get {
  22. if (!_createdAt.HasValue) {
  23. if (DateTime.TryParse(createdAt, out DateTime date)) {
  24. _createdAt = date;
  25. }
  26. }
  27. return _createdAt;
  28. }
  29. set => _createdAt = value;
  30. }
  31. private DateTime? _createdAt;
  32. public MasterCharacterEntity() { }
  33. public MasterCharacterEntity(int id, string name, string description, CharacterType typeId, DateTime createdAt) {
  34. this.id = id;
  35. this.name = name;
  36. this.description = description;
  37. this.typeId = typeId;
  38. this.createdAt = createdAt.ToString();
  39. }
  40. public override string ToString() {
  41. StringBuilder builder = new StringBuilder();
  42. builder.AppendLine().AppendLine($"<b>ClassName [{nameof(MasterCharacterEntity)}]</b>");
  43. builder.AppendLine($"[{nameof(id)}] {id}");
  44. builder.AppendLine($"[{nameof(name)}] {name}");
  45. builder.AppendLine($"[{nameof(description)}] {description}");
  46. builder.AppendLine($"[{nameof(typeId)}] {typeId}");
  47. builder.AppendLine($"[{nameof(createdAt)}] {createdAt}");
  48. return builder.ToString();
  49. }
  50. }
  51. }

Repository

  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace IMDB4Unity.Tests
  5. {
  6. [Serializable]
  7. public sealed partial class MasterCharacterRepository : RepositoryBase<MasterCharacterEntity, MasterCharacterRepository>
  8. {
  9. [SerializeField] private List<MasterCharacterEntity> masterCharacter = new List<MasterCharacterEntity>();
  10. protected override List<MasterCharacterEntity> EntityList => masterCharacter;
  11. public override string Schema => "Master";
  12. public bool TryFindById(int id, out MasterCharacterEntity entity) {
  13. return TryFindBy(x => x.Id == id, out entity);
  14. }
  15. public bool TryFindByName(string name, out MasterCharacterEntity entity) {
  16. return TryFindBy(x => x.Name == name, out entity);
  17. }
  18. public bool TryFindByDescription(string description, out MasterCharacterEntity entity) {
  19. return TryFindBy(x => x.Description == description, out entity);
  20. }
  21. public bool TryFindByTypeId(CharacterType typeId, out MasterCharacterEntity entity) {
  22. return TryFindBy(x => x.TypeId == typeId, out entity);
  23. }
  24. public MasterCharacterEntity GetByIdOrDefault(int id, MasterCharacterEntity defaultEntity) {
  25. return GetByOrDefault(x => x.Id == id, defaultEntity);
  26. }
  27. public MasterCharacterEntity GetByNameOrDefault(string name, MasterCharacterEntity defaultEntity) {
  28. return GetByOrDefault(x => x.Name == name, defaultEntity);
  29. }
  30. public MasterCharacterEntity GetByDescriptionOrDefault(string description, MasterCharacterEntity defaultEntity) {
  31. return GetByOrDefault(x => x.Description == description, defaultEntity);
  32. }
  33. public MasterCharacterEntity GetByTypeIdOrDefault(CharacterType typeId, MasterCharacterEntity defaultEntity) {
  34. return GetByOrDefault(x => x.TypeId == typeId, defaultEntity);
  35. }
  36. public List<MasterCharacterEntity> FindAllById(int id) {
  37. return FindAllBy(x => x.Id == id);
  38. }
  39. public List<MasterCharacterEntity> FindAllByName(string name) {
  40. return FindAllBy(x => x.Name == name);
  41. }
  42. public List<MasterCharacterEntity> FindAllByDescription(string description) {
  43. return FindAllBy(x => x.Description == description);
  44. }
  45. public List<MasterCharacterEntity> FindAllByTypeId(CharacterType typeId) {
  46. return FindAllBy(x => x.TypeId == typeId);
  47. }
  48. }
  49. }

ISerializationCallbackReceiver

  1. create partial implemented ISerializationCallbackReceiver class.
  2. void ISerializationCallbackReceiver.OnBeforeSerialize() {
  3. // from json not called
  4. }
  5. void ISerializationCallbackReceiver.OnAfterDeserialize() {
  6. name = string.IsNullOrEmpty(name) ? string.Intern(name) : "";
  7. description = string.IsNullOrEmpty(description) ? string.Intern(description) : "";
  8. }