实体框架 - 加载特定的外键数据

时间:2016-07-10 18:42:20

标签: c# entity-framework orm

我一直在尝试让它发挥作用,但我不知道我在这里缺少什么。

我的模特是:

public class User
{
    public int id { get; set; }
    public string username { get; set; }

    public virtual List<UserMeta> usermeta { get; set; }

    public User()
    {
        this.usermeta = new List<UserMeta>();
    }

}

public class UserMeta
{
    public int id { get; set; }
    public string metakey { get; set; }
    public string value { get; set; }

    public virtual User user { get; set; }
}

我想为metakey ='first_name'

选择metavalue

目前这就是我所拥有的及其工作原理:

var user = db.Users.Include("UserMeta");

foreach (var item in user)
{
    Console.WriteLine(item.username);

    foreach (var item2 in item.usermeta)
    {
        // check item2.metakey for 'first_name'   
    }
}

但它不会像这样工作:

var user = from u in db.Users
           select u;

foreach (var item in user)
{
    foreach (var item2 in item.usermeta)
    {
    }         
}

第二个代码段有什么问题。还有更好的加载方法吗?

2 个答案:

答案 0 :(得分:0)

在第二个代码段中,您不包含UserMeta表。

试试这个:

var user = (from u in db.Users select u).Include("UserMeta");

答案 1 :(得分:0)

我在使用EF 6.1.3的控制台应用程序中测试此代码并且没有问题(ef版本不太可能出现问题),请测试此代码或与您的代码进行比较(您的代码不完整)。

class Program
{
    static void Main(string[] args)
    {
        using (var db = new ApplicationContext())
        {
            var user = from u in db.Users select u;

            foreach (var item in user)
            {
                foreach (var item2 in item.usermeta)
                {
                    Console.WriteLine(string.Format($"{item2.metakey}:{item2.value}"));
                }
            }
        }

        Console.ReadKey();
    }
}