次の方法で Entity Framework - Code First を使用すると、エラーが発生します。
Global.asax.cs ファイルの内部 (開発時)
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Database.SetInitializer<Investments>(new DropCreateDatabaseIfModelChanges<Investments>());
}
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'