带有c#的实体框架,检索保存的对象

本文关键字:检索 保存 对象 框架 实体 带有 | 更新日期: 2023-09-27 18:21:38

我是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个元素,生成9000个实例需要一段时间(20分钟)。我尝试过使用protobuff,但它仍然需要200mb,当我试图读取回数据时会出现错误。

带有c#的实体框架,检索保存的对象

必须使用.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();
}