SQLite не создает таблицы, как создать это вручную с помощью пользовательских классов? - PullRequest
0 голосов
/ 02 августа 2020

Я использую. Net Framework 4.7, EF 6 и SQLite (System.Data.SQLite), и насколько я понимаю, SQLite не создает таблицы автоматически. Но как правильно создать их вручную, чтобы. Net их понимал и правильно загружал? Насколько я понимаю, мне нужно создать отдельную таблицу для каждого класса. Но как я могу ie соединить их вместе, если у меня есть другие пользовательские классы в некоторых классах? И если количество баз данных (DbSet) не соответствует количеству классов (то есть есть классы, которые не представлены через DbSet, но где они представлены более 1 раза).

Итак, вы можете дать мне пример для пользователей и всех пользовательских классов, которые используются в нем? Как видите, я начал создавать эти таблицы, но столкнулся с этими проблемами. К тому же, насколько я понимаю, есть строгие правила именования, эт c.

namespace MarketBotProject
{
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;

    public class ContextClass : DbContext
    {
        public ContextClass() : base("name=Model1")
        {
            Database.CreateIfNotExists();
            Database.Initialize(true);
            using(ContextClass CC = new ContextClass())
            {
                CC.Database.ExecuteSqlCommand("CREATE TABLE IF NOT EXISTS 'Categories' ('Id' INT PRIMARY KEY, 'Name64' TEXT, 'Parent64' TEXT, 'Price' DOUBLE)");
                CC.Database.ExecuteSqlCommand("CREATE TABLE IF NOT EXISTS 'Goods' ('Id' INT PRIMARY KEY, 'CategoryId' INT, 'Text64' TEXT)");
                CC.SaveChanges();
            }
        }


        public virtual DbSet<Category> Categories { get; set; }
        public virtual DbSet<Item> Goods { get; set; }
        public virtual DbSet<BUser> Users { get; set; }
        public virtual DbSet<PartnershipRequest> PartnershipRequests { get; set; }
        public virtual DbSet<Promocode> Promocodes { get; set; }
        public virtual DbSet<xPub> xPubs { get; set; }
        public virtual DbSet<HPayment> HPayments { get; set; }
    }

    public class Category
    {
        public int Id { get; set; }
        public string Name64 { get; set; }
        public string Parent64 { get; set; } = null;
        public double Price { get; set; } = -1;
    }

    public class Item
    {
        public int Id { get; set; }
        public int CategoryId { get; set; }
        public string Text64 { get; set; }
    }

    public class Order
    {
        public int Id { get; set; }
        public int BUserId { get; set; }
        public Item Product { get; set; } = new Item();
        public int Count { get; set; } = 1;
    }

    public class Balance
    {
        public int Id { get; set; }
        public int BUserId { get; set; }
        public double Available { get; set; } = 0;
        public double Frozen { get; set; } = 0;
        public double Spent { get; set; } = 0;
    }

    public class BUser
    {
        public int Id { get; set; }
        public Promocode Promo { get; set; } = null;
        public List<Order> Cart { get; set; } = new List<Order>();
        public List<int> OrderIds { get; set; } = new List<int>();
        public Balance CommonBalance { get; set; } = new Balance();
        public Balance PartnerBalance { get; set; } = new Balance();
        public BTCAddress Address { get; set; } = null;
        public int Referrals { get; set; } = 0;
        public int Role { get; set; } = 0;
        public string RoleDescription64 { get; set; } = "";
        public string Page { get; set; } = "Default";
        public Category Cat { get; set; } = null;
    }

    public class PartnershipRequest
    {
        public int Id { get; set; }
        public int BUserId { get; set; }
        public string Username64 { get; set; }
        public string Nickname64 { get; set; }
        public double Sum { get; set; }
        public string Address64 { get; set; }
    }

    public class Promocode
    {
        public int Id { get; set; }
        public string Code64 { get; set; }
        public int OwnerId { get; set; }
        public bool Used { get; set; } = false;
    }
    
    public class xPub
    {
        public int Id { get; set; }
        public string Key64 { get; set; }
        public List<BTCAddress> Addresses { get; set; } = new List<BTCAddress>();
    }

    public class BTCAddress
    {
        public int Id { get; set; }
        public string Address { get; set; }
        public bool Blocked { get; set; } = false;
        public DateTime Assigned { get; set; } = DateTime.Now;
        public double StartedBalance { get; set; }
    }

    public class HPayment
    {
        public int Id { get; set; }
        public int BUserId { get; set; }
        public string Username64 { get; set; }
        public string Nickname64 { get; set; }
        public double BTC { get; set; }
        public double USD { get; set; }
        public DateTime DT { get; set; } = DateTime.Now;
        public List<Item> Items { get; set; } = new List<Item>();
    }
}
...