C# 如何对两个表使用相同的模型。或db最佳实践

C# 如何对两个表使用相同的模型。或db最佳实践,c#,asp.net-mvc,ef-code-first,C#,Asp.net Mvc,Ef Code First,在MVC应用程序中,我正在设置一个数据库,其中包含多个具有相同结构的表,我希望对所有表使用相同的模型,而不必为每个表创建新模型。当尝试使用同一模型创建多个表时,我遇到以下错误: “不支持每种类型有多个对象集” 是否可以使用同一个模型创建两个表 我正在用equitys的历史价格建立数据库。这个想法是每个股票一张表 Stock1 Stock2 -Date -Date -Price

在MVC应用程序中,我正在设置一个数据库,其中包含多个具有相同结构的表,我希望对所有表使用相同的模型,而不必为每个表创建新模型。当尝试使用同一模型创建多个表时,我遇到以下错误:

“不支持每种类型有多个对象集”

是否可以使用同一个模型创建两个表

我正在用equitys的历史价格建立数据库。这个想法是每个股票一张表

 Stock1                       Stock2
 -Date                        -Date
 -Price                       -Price
或者,db设计中的最佳实践是将具有相同结构的所有数据放在一个表中,然后使用另一个表将数据连接到父表

Instruments              Data
-StockId                 -Date
-StockName               -Price
                         -StockId(FK)
代码:

//表的模型
公营文书
{
[关键]
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共阶层公平
{
[关键]
公共int Id{get;set;}
公共日期时间日期{get;set;}
[外汇(“票据”)]
公共int工具ID{get;set;}
公共虚拟仪器{get;set;}
公共双开{get;set;}
公共双关闭{get;set;}
公共双高{get;set;}
公共双低位{get;set;}
公共int卷{get;set;}
}
//运行“添加迁移”时创建表的代码
公共数据库集工具{get;set;}
公共DbSet Stock1{get;set;}
公共DbSet Stock2{get;set;}

每个股票一张表是个坏主意

您可以在DbContext类的
Stock1
属性中存储所有股票的数据。添加一个属性/列以将股票名称/股票ID区分到权益表中

如果您使用的是
StockI
,请创建一个Stock表,并且
Equity
表中的
StockId
将具有到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
类型的属性。您可以通过该工具访问所有股票记录,或根据需要对其进行过滤(例如:获取特定股票的记录)


您为什么需要库存2<代码>库存1足以存储所有库存的数据(1,2,3..n)。添加StockName/StockId(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;}
}
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();