2017-03-28 86 views
1

我正在嘗試使用PostgreSQL的實體框架核心。我有兩個表是一對多的關係。根據這種關係,電影有一年和一年有很多電影。但一旦我檢索電影,年份不包含在內,每部電影中的年份爲空,除非檢索年份。但經過這些年,電影成爲有多年。當我將年份檢索代碼行改爲up時。發生的情況也是如此。這些年來沒有電影,除非檢索電影。然後,在檢索電影之後,選定的年份變成有電影。任何人都可以知道如何解決它?這就像懶加載。不使用PostgreSQL檢索實體框架核心中的相關表數據

這是我的兩個實體。

public class T_MOVIE 
{ 
    [Key] 
    public long Oid { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public DateTime CreatedDate { get; set; } 
    public long? YearOid { get; set; } 
    [ForeignKey("YearOid")] 
    public T_YEAR MOVIE_YEAR { get; set; } 
} 

public class T_YEAR 
{ 
    public T_YEAR() 
    { 
     this.YEAR_MOVIEs = new HashSet<DataModel.T_MOVIE>(); 
    } 
    [Key] 
    public long Oid { get; set; } 
    public string Name { get; set; } 
    public ICollection<T_MOVIE> YEAR_MOVIEs { get; set; } 
} 

而在OnModelCreating,

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    builder.Entity<T_MOVIE>().HasKey(m => m.Oid); 
    builder.Entity<T_MOVIE>().HasOne(m => m.MOVIE_YEAR).WithMany(m => m.YEAR_MOVIEs); 

    builder.Entity<T_YEAR>().HasKey(m => m.Oid); 
    builder.Entity<T_YEAR>().HasMany(m => m.YEAR_MOVIEs).WithOne(m => m.MOVIE_YEAR); 
} 

然後,我檢索數據。

var movies = _db.T_MOVIE.ToList(); 
var years = _db.T_YEAR.ToList(); 

謝謝。

+1

[EF核心返回空關係直到直接訪問]的可能重複(http://stackoverflow.com/questions/42327515/ef-core-returns-null-relations-untill-direct-access) –

+0

謝謝。我知道你從我給你的鏈接加載了Eager。 – Neo

回答

2

您必須在查詢中添加「Include()」。除非這樣做,否則返回空關係。

+0

var movies =(from _db.T_MOVIE.Include中的m)(x => x.MOVIE_YEAR) select m).ToList(); 謝謝。 – Neo

+0

有關加載相關數據的更多信息,請參閱文檔 - https://docs.microsoft.com/en-us/ef/core/querying/related-data – Smit

相關問題