Как использовать одну и ту же модель для двух таблиц.Или дБ лучшая практика - PullRequest
0 голосов
/ 28 декабря 2018

В приложении MVC я настраиваю базу данных с несколькими таблицами, которые имеют одинаковую структуру, и я хочу использовать одну и ту же модель для всех из них, вместо того, чтобы создавать новую модель для каждой из них.При попытке использовать одну и ту же модель при создании нескольких таблиц я получаю следующую ошибку:

«Не поддерживаются несколько наборов объектов для каждого типа»

Возможно ли как-то использоватьта же модель для создания двух таблиц?

Я строю БД с историческими ценами на акции.Идея состоит в том, чтобы использовать одну таблицу на одну акцию.

 Stock1                       Stock2
 -Date                        -Date
 -Price                       -Price

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

Instruments              Data
-StockId                 -Date
-StockName               -Price
                         -StockId(FK)

Код:

//Models for tables

 public class Instruments
 {
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
 }


public class Equity
{
    [Key]
    public int Id { get; set; }
    public DateTime Date { get; set; }
    [ForeignKey("Instruments")]
    public int InstrumentId { get; set; }
    public virtual Instruments Instruments { get; set; }
    public double Open { get; set; }
    public double Close { get; set; }
    public double High { get; set; }
    public double Low { get; set; }
    public int Volume { get; set; }
}

//Code to create tables when running "add-migration"
public DbSet<Instruments> Instruments { get; set; }
public DbSet<Equity> Stock1 { get; set; }
public DbSet<Equity> Stock2 { get; set; }

1 Ответ

0 голосов
/ 28 декабря 2018

Одна таблица на акцию - плохая идея.

Вы можете хранить данные для всех акций в свойстве Stock1 вашего класса DbContext.Добавьте свойство / столбец, чтобы различать название акции / StockId в таблице Equity.

Если вы используете StockI, создайте таблицу Stock, и StockId в вашей таблице Equity будет иметь внешний ключподключение к таблице Stock.

public class Stock
{
    public int Id { get; set; }
    public string Ticker { set;get; } 
    public string Name { get; set; }
}

public class Equity
{
    [Key]
    public int Id { get; set; }
    public DateTime Date { get; set; }
    [ForeignKey("Instruments")]
    public int InstrumentId { get; set; }
    public virtual Instruments Instruments { get; set; }
    public double Open { get; set; }
    public double Close { get; set; }
    public double High { get; set; }
    public double Low { get; set; }
    public int Volume { get; set; }

    public int StockId { set;get;}
    public virtual Stock Stock { set;get;}
}

Теперь в вашем классе DbContext у вас будет только одно свойство типа DbSet<Equity>.С помощью этого вы можете получить доступ ко всем записям Акций или отфильтровать их в соответствии с вашими потребностями (например: Получить записи по конкретным Акциям)

public DbSet<Equity> Equities { get; set; }

Чтобы получить данные по конкретным Акциям, вы обычно будете использовать фильтр.Например,

var stockIdOfMsft = 24; 
var msftEquities = db.Equities.Where(a=>a.StockId == stockIdOfMsft).ToList();

Или

var msftEquities = db.Equities.Where(a=>a.Stock.Ticker == "MSFT").ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...