2012-04-18 19 views
0

エンティティフレームワークを使用する際にエラーが発生しました。 (開発期間中)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」

答えて

0

あなたが行うことができるように思われる最高のRun some code to check if a table existsです。しかし、ここには多くのオーバーヘッドがあります。本当に、私はこれをあなたの例外処理によって捕まえて、その時にそれを処理させることを提案します。あなたはどのくらいの頻度でテーブルを持っていませんか?

本当にこのチェックが必要な場合は、アプリの開始時にチェックして、そのポイントの後に存在することを確認する必要があります。

関連する問題