Локальная база данных

Основной код

Параметры

App

public static class DB
{
    public static List<User> Users { get; set; } = new List<User>();
    public static List<Item> Items { get; set; } = new List<Item>();

    public static async void SaveDB()
    {
        await NetManage.Set<List<Item>>("Items", Items);
        await NetManage.Set<List<User>>("Users", Users);
    }

    public static void Initialize()
    {
        if (Settings.Default.IsActive)
        {
            Users = NetManage.Get<List<User>>("Users");
            Items = NetManage.Get<List<Item>>("Items");
            return;
        };

        var user1 = new User { Id = 1, Name = "Alice" };
        var user2 = new User { Id = 2, Name = "Bob" };

        Users.Add(user1);
        Users.Add(user2);

        var item1 = new Item { Id = 1, Name = "Laptop", User = user1 };
        var item2 = new Item { Id = 2, Name = "Smartphone", User = user2 };
        var item3 = new Item { Id = 3, Name = "Computer", User = user2 };

        Items.Add(item1);
        Items.Add(item2);
        Items.Add(item3);

        App.DB.SaveDB();

        Settings.Default.IsActive = true;
        Settings.Default.Save();
    }
}
      

MainWindow.cs

public MainWindow()
{
    InitializeComponent();
    App.DB.Initialize();
}
      

Serviews/NetManage

public static T Get<T>(string controller)
{
    var settings = Settings.Default;
    var properties = settings.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

    var text = properties.FirstOrDefault(x => x.Name == controller);

    var xmlSerializer = new XmlSerializer(typeof(T));
    using (var stringReader = new StringReader(text.GetValue(settings).ToString()))
    {
        return (T)xmlSerializer.Deserialize(stringReader);
    }
}

public static async Task Set<T>(string controller, T list)
{
    var settings = Settings.Default;
    var properties = settings.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

    var property = properties.FirstOrDefault(x => x.Name.Equals(controller, StringComparison.OrdinalIgnoreCase));
    if (property == null)
        return;

    var xmlSerializer = new XmlSerializer(typeof(T));
    using (var stringWriter = new StringWriter())
    {
        xmlSerializer.Serialize(stringWriter, list);
        string jsonData = stringWriter.ToString();

        property.SetValue(settings, jsonData);
    }
    Settings.Default.Save();
}
      

Использование

Добавление

if (contextData.Id == 0)
{
    var data = App.DB.Users.LastOrDefault();
    if (data == null)
        contextData.Id = 1;
    else
        contextData.Id = data.Id + 1;

    App.DB.Users.Add(contextData);
}
App.DB.SaveDB();
Refresh();
      

Удаление

App.DB.Users.Remove(data);
App.DB.SaveDB();