簡體   English   中英

實體框架子級為null

[英]Entity framework child is null

我是EntityFramework的新手,所以問題可能有點愚蠢,但我嘗試搜索Google卻一無所獲。

我在db中有一個表:

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    [Required]
    public UserProfile Owner { get; set; }
    [Required]
    public string Mask { get; set; }
    [Required]
    public string Key { get; set; }
    public DateTime Generated { get; set; }
    public DateTime DateTo { get; set; }
    public bool isElite { get; set; }

其中,UserProfile Owner是指向另一個表的鏈接。 當我這樣選擇時:

 db.Keys.Where(s=>s.Owner.UserId == WebSecurity.CurrentUserId && s.DateTo > DateTime.UtcNow).ToList()

它運作良好,但是當我嘗試通過許可證聯系所有者時,它始終為空。 有人可以幫忙如何獲得擁有許可的所有者嗎? 感謝您的時間!

編輯:我認為我犯了一個錯誤,並錯誤地發布了一個問題。 我真正需要的是當我按其ID搜索許可證時,例如: License license = db.Keys.Find(id); 我可以像這樣獲得所有者: var a = license.Owner; 我以前使用過Active Record,並且“按需”加載了此類數據(僅當我對其進行調用時)。 我可以用EF這樣做嗎?

使用您擁有的代碼,您可以通過在許可證類中將其標記為virtual來延遲加載所有者。

由於您仍處於上下文中(使用db),因此EF會自動調用以充填Owner

有關加載相關實體的好文章, 請查看此內容

編輯(使用linq查詢):

這是linq查詢的外觀示例,但您仍然可能需要懶惰或急於加載所有者。

var query = from k in db.Keys
            where k.Owner.UserId.Equals(WebSecurity.CurrentUserId)
            && k.DateTo > DateTime.UtcNow
            select k;

var list = query.ToList();

利用DbQuery.Include(string path)方法單擊此處

至少對我有用。

這是您的代碼:

db.Keys.Include(“ Owner”)。其中(s => s.Owner.UserId == WebSecurity.CurrentUserId && s.DateTo> DateTime.UtcNow).ToList()

如果您希望“鍵”查詢返回大量結果,則這可能不是最佳方法。 但是只有有限的結果,它就像一個魅力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM