使用c#实体框架,检索已保存的对象

时间:2014-09-12 19:27:52

标签: c# entity-framework

我是EF的新手,在查看教程后,似乎我可以保存数据,但不知道检索它的代码。我的班级看起来像

public class Item
{
    [Key]
    public int index { get; set; }
    public string name;
    public List<string> type;
    public List<string> def;
    public HashSet<string> syns;
    public HashSet<string> generator_list = new HashSet<string>();
    public List<Point> related_items2 = new List<Point>();
}

EF代码看起来像

    using (var ctx = new Context())
    {
        foreach (Item block in items)
        {
            ctx.items_db.Add(block);
        }
        ctx.SaveChanges();

        var test = from b in ctx.items_db
                    orderby b.index
                    select b;
    }

我有9000个Item实例,我只想将它们保存在数据库中,然后将它们检索到包含所有实例的List<Item>。但我不认为我使用var test做得对,因为它似乎不是List<Item>而我似乎无法在using之外访问它声明块。

我这样做的唯一原因是因为我想要的唯一的事情是保存related_items2属性(所以我不必在每次重启时重新生成它),因为它有9000个元素,需要一段时间(20分钟)生成9000个实例。我尝试使用protobuff,但仍然占用200mb,当我尝试重新读取数据时出现错误。

1 个答案:

答案 0 :(得分:1)

您必须使用.ToList()将数据更改为项目列表
如果您未使用.ToList,则您的测试变量为IQueryable,而不是数据列表 使用不起作用

var test=new List<Item>();
using (var ctx = new Context())
{
    foreach (Item block in items)
    {
        ctx.items_db.Add(block);
    }
    ctx.SaveChanges();

    test = (from b in ctx.items_db
                orderby b.index
                select b).ToList();
}