0

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

所以,我正在使用实体框架,我正在尝试使用 ToList 方法通过以下代码从数据集中加载“惯用语”列表:

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

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

编辑

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

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

Livro容器:

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; }
}

谢谢

4

1 回答 1

0

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

但是,请确保以下内容:

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

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       modelBuilder.Entity<Idioma>().ToTable("IdiomaTableNameInDatabase");
    }
    
  3. 确保您在 DbContext 基础构造函数中传递的 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();
}
于 2013-10-22T12:32:59.167 回答