2016-09-26 17 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)。我想它可能会给你一些关于如何查看实体集名称的想法。 –