DataSet ToList方法返回空List,即使它有元素

时间:2013-10-22 12:17:49

标签: c# entity-framework

很抱歉,如果有人问过这个问题。我一直在四处寻找但找不到相关的东西。

所以,我正在使用Entity Framework,我试图通过以下代码使用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; }
}

IDIOMAS:

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 个答案:

答案 0 :(得分:0)

根据您发布的代码数量,没有人能够看到您的代码无效的原因。

但是,请确保以下内容:

  1. 实例contexto的类继承DbContext或继承DbContext的任何子类。
  2. 如果您没有生成数据库,请通过代码生成数据库,而不是将现有数据库映射到codefirst前端,DbSet<Idioma> Idiomas映射到正确的表。即。

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

    如果所有这些都是正确的,那么绝对没有理由,为什么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();
    }
    
相关问题