public class DataContext : DbContext
{
public DataContext() : base("myDb") { }
public DbSet<Entry> RurEntries { get; set; }
public DbSet<Entry> UsdEntries { get; set; }
public DbSet<Entry> EurEntries { get; set; }
}
每种货币有3个表格:Rur,Usd,Eur。都具有相同的结构。 有一个名为CurrentCurrency的字符串变量,它从UI更改,可能是3种货币之一。在我之前没有实体框架的代码中,我有一些代码用纯sql读取db,有些像:
string sqlQuery = "Select * from " + CurrentCurrency
现在我决定用Entity Framework重写代码并面对这个问题。任何答案将不胜感激。提前谢谢。
答案 0 :(得分:3)
您只需打开CurrentCurrency字符串即可获得所需的设置:
arr[3]
答案 1 :(得分:1)
每个DbContext只能在T
中使用一个实体类DbSet<T>
。你的代码不会运行。另请参阅Entity Framework 6 Creating Two table from the same entity object。
鉴于你的意见:
所有3个表都有unique_id字段,我从另一个软件收到。我在该列上使用了唯一标志,如果我将所有条目放在同一个表中,则可能会出现问题
您只需要一个由Currency和ExternalId组成的复合主键,如Composite Key with EF 4.1 Code First中所述:
public class Entry
{
[Key]
[Column(Order = 0)]
public string Currency { get; set; }
[Key]
[Column(Order = 1)]
public string ExternalId { get; set; }
}
然后你可以阅读&#34; EUR&#34;像这样的行:
var eurRows = dbContext.Entries.Where(e => e.Currency == "EUR");
答案 2 :(得分:0)
您可以在Entity Framework中执行原始SQL查询。像这样:
var curs = context.Database.SqlQuery<Entry>("Select * from " + CurrentCurrency").ToList();
您还可以使它更整洁并创建存储过程,您可以在其中发送参数并根据该参数执行SELECT
语句。然后使用Entity框架,您将该过程调用为将结果映射到List<Entry>
。
但是,正如我在评论中所说的,我个人更喜欢只有一个表CurrenyCode
列。而不是具有完全相同的结构但具有不同数据的3个表。然后你可以像这样查询:
var curs = var curs = context.Currencies.Where(x=> x.CurrencyCode = CurrentCurrency)
.ToList();