简单的LINQ选择(使用实体框架)不返回值

时间:2014-03-17 19:53:34

标签: c# linq entity-framework

我是C#和Entity Framework的新手。我的LINQ选择永远不会从我的实体编辑器返回一个值。我有一个名为编辑的表格,其中包含以下数据:

Editor
---------------------------------
Id |  Name    | Email 
1  |  Oreilly | oreilly@email.com
2  |  Apress  | apress@email.com
3  |  Abril   | abril@email.com
4  |  Europa  | europa@email.com

Web.Config 上的连接字符串是:

  <connectionStrings>
    <add name="EditoraContext" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Database=livraria;
         uid=sa;pwd=sa;Trusted_Connection=true;Integrated Security=True;MultipleActiveResultSets=True"/>
  </connectionStrings>

在我的项目中的模型文件夹中,我有如下 Editora 类:

 namespace LivrariaVirtual.Models
{
    public class Editora
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Email { get; set; }
        public virtual ICollection<Livro> Livros { get; set; }

    }
}

我有一个 LivrariaVirtualContext 类来保留不同的 DbContexts

namespace LivrariaVirtual.Models
{
    public class LivrariaVirtualContext : DbContext
    {
        public DbSet<Editora> Editoras { get; set; }
        public DbSet<Livro> Livros { get; set; }
    }
}

我有一个名为 EditoraRepository 的类,它有一个方法 FetchAll ,它应该返回表 Editoras 中的所有记录:

namespace LivrariaVirtual.Models
{
    public class EditoraRepository
    {

        private LivrariaVirtualContext context = new LivrariaVirtualContext();

        public List<Editora> FetchAll()
        {
            var consulta = from e in context.Editoras
                           select e;            
            return consulta.ToList();
        }
    }
}

我在我的控制器上使用此方法 FetchAll ,但它没有返回任何内容。这是我的控制器 EditorasController

namespace LivrariaVirtual.Controllers
{
    public class EditorasController : Controller
    {
        //
        // GET: /Editoras/

        public ActionResult Index()
        {
            var editoraRepository = new EditoraRepository();                                    
            return View(editoraRepository.FetchAll());
        }

    }
}

我尝试使用断点使用名为 test 的变量进行调试。

namespace LivrariaVirtual.Controllers
{
    public class EditorasController : Controller
    {
        //
        // GET: /Editoras/

        public ActionResult Index()
        {
            var editoraRepository = new EditoraRepository();
            var teste = editoraRepository.FetchAll();
            return View(editoraRepository.FetchAll());
        }

    }
}

test 的值为: Count = 0

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

我认为问题在于您的DBContext类的名称和您的连接字符串的名称。

默认约定是DBContext类与connectionstring匹配。在您的情况下,DBContext类名称为LivrariaVirtualContext,但您的连接字符串名称为EditoraContext

如果要保留连接字符串名称,则可以选择在实例化LivrarVirtualContext时传递connectionstring的名称

示例:

private LivrariaVirtualContext context = new LivrariaVirtualContext("EditoraContext");