エンティティフレームワークを使用する際にエラーが発生しました。 (開発期間中)Global.asax.csファイルEFコードファースト - 挿入または更新。テーブルが存在しない場合のエラー
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Database.SetInitializer<Investments>(new DropCreateDatabaseIfModelChanges<Investments>());
}
投資クラスの内部
は比較的簡単です:彼らは、テーブルに存在する場合
public class Investments : DbContext
{
public Investments() : base("Investments") { }
public DbSet<Holding> Holdings { get; set; }
}
は私がレコードを更新することができます(テーブルが存在する場合のみ)、レコードが存在しない場合は(テーブルが存在しない場合でも)次のコードを使用して挿入します。
Decimal totalPercentage;
List<Holding> mergedHoldings = GetMergedHoldings(fund, out totalPercentage);
try
{
Investments inv = new Investments();
foreach (Holding h in mergedHoldings)
{
if (inv.Holdings != null && inv.Holdings.Count<Holding>() > 0)
{
var record = inv.Holdings.FirstOrDefault(m => m.Name == h.Name);
if (record != null)
{
record.Percentage = h.Percentage;
record.Symbol = h.Symbol;
record.Sector = h.Sector;
inv.Holdings.Attach(record);
inv.Entry(record).State = System.Data.EntityState.Modified;
}
}
else
inv.Holdings.Add(h);
}
inv.SaveChanges();
}
catch (Exception e)
{
throw;
}
テーブルがまだ存在しない場合は、私の問題が発生します。レコードが一致するかどうかを確認することはできません。なぜなら、テーブルはそこにないからです。これを回避する方法はありますか?私はそこにif-exists-then-update-else-addコードを残しておきたいと思っていますが、最初のロード・ロード中にif-exists-then-updateのチェックをコメントアウトする必要があります。これは開発中に迷惑です。
エラーは次のとおりです。 System.Data.SqlClient.SqlException:無効なオブジェクト名「dbo.Holdings」