我是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 。
有人可以帮助我吗?
答案 0 :(得分:3)
我认为问题在于您的DBContext类的名称和您的连接字符串的名称。
默认约定是DBContext类与connectionstring匹配。在您的情况下,DBContext
类名称为LivrariaVirtualContext
,但您的连接字符串名称为EditoraContext
。
如果要保留连接字符串名称,则可以选择在实例化LivrarVirtualContext
时传递connectionstring的名称
示例:
private LivrariaVirtualContext context = new LivrariaVirtualContext("EditoraContext");