2012-04-18 156 views
0

錯誤在使用實體框架 - Code First時出現以下錯誤。EF代碼優先 - 插入或更新;如果表不存在

裏面的Global.asax.cs文件(在開發階段)

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。但是,這裏有很多開銷。真的,我會建議讓它在你的異常處理中被捕獲並在那個時候處理它。你多久沒有一張桌子?

如果你確實需要這個檢查,那麼你應該在應用程序啓動時檢查,然後相信它在那之後存在。