方法返回空列表,即使它有元素

本文关键字:元素 返回 列表 方法 | 更新日期: 2023-09-27 18:36:20

对不起,如果有人已经问过这个问题。我一直在环顾四周,但找不到任何相关的东西。

因此,我正在使用实体框架,并且我正在尝试使用以下代码使用ToList方法从数据集中加载"Idiomas"列表:

//List<Idioma> ans = new List<Idioma>(contexto.Idiomas);
return contexto.Idiomas.ToList();

但是,该方法返回一个空列表,即使我可以通过调试器看到 DataSet 具有元素。

编辑

我没有输入任何额外的代码,因为除了这两行之外没有任何额外的代码。我只是先创建一个实体框架模型,生成数据库,然后从数据库更新模型以确保一切正常。

Contexto

是来自类 LivroContexto 的一个实例,它实现了 DbContext(由 vs2012 自动生成,见下文)。

LivroContainer:

public partial class LivroContainer : DbContext
{
    public LivroContainer() : base("name=LivroContainer")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    }
    public DbSet<Idioma> Idiomas { get; set; }
}

成语:

public partial class Idioma
{
    public Idioma()
    {
        this.Traducaos = new HashSet<Traducao>();
    }
    public int IdIdioma { get; set; }
    public string Lingua { get; set; }
    public virtual ICollection<Traducao> Traducaos { get; set; }
}

谢谢

方法返回空列表,即使它有元素

没有人能从你发布的代码量中看到为什么你的代码不起作用。

但是,请确保以下几点:

  1. contexto继承DbContext的实例的类或任何继承DbContext的子类。
  2. 确保,以防万一,你没有通过代码生成数据库,而是将现有数据库映射到代码优先前端,DbSet<Idioma> Idiomas映射到正确的表。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       modelBuilder.Entity<Idioma>().ToTable("IdiomaTableNameInDatabase");
    }
    
  3. 确保在 DbContext
  4. 基构造函数中传递的 connectionString 名称存在于 web.config 中,如果您没有传递任何内容,请确保存在具有 DbContext 继承类名称的 connectionString。

如果所有这些都是正确的,那么绝对没有理由,为什么contexto.Idiomas.ToList()不会返回任何东西。

而且,比如说,你的上下文类是MyContext,那么它应该是这样的:

public class MyContext:DbContext
{
     public MyContext:base("ConnectionStringName")
     {
     }
     //--dbSet properties
     public DbSet<Idioma> Idiomas{get;set;}
     //other overridden methods
}

你使用哪个,在你的上层像这样:

public List<Idioma> GetAllIdiomas()
{
   MyContext contexto = new MyContext();
   return contexto.Idiomas.ToList();
}