EF代码优先:找不到EntitySet名称'TestDBContext1.Customers'

时间:2016-09-26 12:45:03

标签: entity-framework

我收到此错误

  

其他信息:EntitySet名称'TestDBContext1.Customers'   无法找到。

我试图调用一个返回多个结果集的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的那一刻,代码运行正常。只是不明白我上面的代码有什么问题。请有人帮助我理解这一点。感谢

2 个答案:

答案 0 :(得分:0)

如果您的集合没有名称,则只需输入

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

MergeOption的默认值已经是AppendOnly,因此您也不必担心该参数。

答案 1 :(得分:-1)

我认为您的实体集没有名称。我想如果你将<a href="#" ontouchend="this.onclick=fix">test</a> 作为第二个输入传递给null,它会做你想做的事情:

Translate