2016-09-26 49 views
0

我收到此錯誤EF代碼第一:EntitySet的名稱「TestDBContext1.Customers」找不到

Additional information: The EntitySet name 'TestDBContext1.Customers' could not be found.

我試圖調用SQL Server存儲過程返回多個結果集。

這是我的全碼:

private void button4_Click(object sender, EventArgs e) 
{ 
    using (var db = new TestDBContext1()) 
    { 
     db.Database.Initialize(force: false); 

     // Create a SQL command to execute the stored procedure 
     var cmd = db.Database.Connection.CreateCommand(); 
     cmd.CommandText = "[dbo].[MultiResultSet]"; 

     try 
     { 
      db.Database.Connection.Open(); 

      // Run the stored procedure 
      var reader = cmd.ExecuteReader(); 

      // Read Blogs from the first result set 
      var customers = ((IObjectContextAdapter)db) 
         .ObjectContext 
         .Translate<Customer>(reader, "Customers", MergeOption.AppendOnly); 

      foreach (var item in customers) 
      { 
       Console.WriteLine(item.FirstName); 
      } 

      // Move to second result set and read Posts 
      reader.NextResult(); 

      var Addresses = ((IObjectContextAdapter) db) 
         .ObjectContext 
         .Translate<Addresses>(reader, "Addresses", MergeOption.AppendOnly); 

      foreach (var item in Addresses) 
      { 
       Console.WriteLine(item.Address1); 
      } 
     } 
     finally 
     { 
      db.Database.Connection.Close(); 
     } 
    } 
} 

此行拋出上述錯誤:

var customers = ((IObjectContextAdapter)db) 
.ObjectContext 
.Translate<Customer>(reader, "Customers", MergeOption.AppendOnly); 

我的數據庫表是CustomersAddresses。爲什麼我得到這個錯誤?在我的代碼中更改什麼?

有趣的是,當我像下面的方式編碼,然後一切正常。

var customers = ((IObjectContextAdapter)db) 
.ObjectContext 
.Translate<Customer>(reader); 

的那一刻,我從代碼中刪除"Customers", MergeOption.AppendOnly然後代碼工作正常。只是不明白我上面的代碼中有什麼問題。請有人幫我理解這一點。謝謝

+0

你有'公共DbSet 客戶{獲得;組; }'在你的'TestDBContext1'類中? –

+0

yes public'public DbSet Customer {get;組; }' –

+1

然後實體集名稱是「客戶」(末尾不帶)' –

回答

0

我不認爲你的實體集一個名字。我認爲,如果你通過null作爲第二輸入Translate,它會做你想要什麼:

var customers = ((IObjectContextAdapter)db) 
    .ObjectContext 
    .Translate<Customer>(reader, null, MergeOption.AppendOnly); 
+0

對不起,我設置爲空,但沒有好處,並得到一個錯誤味精'參數'entitySetName'不能爲空,空或只包含空格。' –

+0

是否有任何方法可以從代碼中看到實體集名稱? –

+1

啊,你說得對,對不起。這很煩人,因爲我可以看到,如果刪除空檢查,那麼在內部空參數將被正確處理。你可以看看[這個答案](http://stackoverflow.com/a/3893502/76123)。我想它可能會給你一些關於如何查看實體集名稱的想法。 –