2016-06-18 3 views
0

Я работаю с SQLite CodeFires EF 6.1.3. Все работает нормально, но я хочу использовать обратное свойство.SQLite code first and inverse property

У меня есть 2 классов:

public sealed class Page 
{ 
    .... 
    [InverseProperty("PageOfThisKey")] 
    public ICollection<Keys> KeysOfThisPage { get; set; } 
    ... 
} 

и класс Key:

public sealed class Key 
{ 
    ... 
    public Int32 PageID { get; set; } 
    [ForeignKey("PageID")] 
    public Page PageOfThisKey { get; set; } 
    ... 
} 

Так что я хочу, чтобы быть в состоянии сделать это взять экземпляр страницы и получить все ключи, посвященные этому страницы в собственности. Так сказать - вот так:

var db = ConnectionManager.GetContext(); 
var keys = db.Pages.First().KeysOfThisPage; 

Но переменная 'keys' всегда равна нулю.

Я использую код первого и SQLite код первого решения https://github.com/msallin/SQLiteCodeFirst

Может кто-нибудь, пожалуйста, посмотрите, как это можно решить эту проблему?

ответ

1

вы должны использовать «виртуальные» ключевое слово для включения отложенной загрузки, как это:

public class Page 
{ 
    .... 
    [InverseProperty("PageOfThisKey")] 
    public virtual ICollection<Keys> KeysOfThisPage { get; set; } 
    ... 
} 

public class Key 
{ 
    ... 
    public Int32 PageID { get; set; } 

    [ForeignKey("PageID")] 
    [InverseProperty("KeysOfThisPage")] 
    public virtual Page PageOfThisKey { get; set; } 
    ... 
} 

Или вы можете с помощью «включать» в Linq запрос.

var keys = db.Pages.Include("KeysOfThisPage").First().KeysOfThisPage; 

для получения дополнительной информации см это link

+0

Спасибо :) Просто небольшая заметка - виртуальная keywork не будет работать с запаянной класса, поэтому он не должен быть помечен как запечатаны. – Oleksii

+0

Да, вы правы, ответьте на обновления, спасибо. – Iraj