简单的LINQ查询(使用Entity Framework)没有返回值

3

我刚接触C#和Entity Framework。我的LINQ查询从我的实体编辑器中永远不会返回值。我有一个名为Editor的表,其中包含以下数据:

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>

在我的项目中的 Models 文件夹中,我有以下类 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());
        }

    }
}
< p > < em > test < /em > 的值为:< strong > 计数 = 0 < /strong >。 < /p > < p > 有人能帮我吗?< /p >
1个回答

3
我认为问题出在DBContext类的名称和连接字符串的名称上。
默认约定是DBContext类与连接字符串匹配。在你的情况下,DBContext类名为LivrariaVirtualContext,但连接字符串名为EditoraContext。
如果你想保持连接字符串名称,你可以在实例化LivrariaVirtualContext时传递连接字符串的名称。
例如:
private LivrariaVirtualContext context = new LivrariaVirtualContext("EditoraContext");

我认为你是正确的。这也意味着某个自动生成的空数据库存在,其名称类似于“LivrariaVirtual.Models.LivrariaVirtualContext”。 - Gert Arnold
我已将连接字符串更改为LivrariaVirtualContext,现在一切都完美地运行。谢谢你,Ganesh! - James Freitas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接