2011-03-30 138 views
1

我正在考慮是否從EF CTP5中刪除剛開始的新應用程序的開發。實體框架CTP5重新加載相關實體

這裏是我的情況:

public class EnergieContext : DbContext, IEnergieContext 
{ 
    public EnergieContext() 
     : base("EnergieDatabase") 
    { 
     this.Configuration.ProxyCreationEnabled = false; 
    } 
protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<RegionUser>() 
      .Property(ru => ru.RegionUserID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
    } 

    public DbSet<Region> Regions { get; set; } 
    public DbSet<RegionUser> RegionsUsers { get; set; } 

public class Region 
{ 
    public int RegionID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<RegionUser> RegionUsers { get; set; } 
} 

public class RegionUser 
{ 
    [Key] 
    [Column(Order = 0)] 
    public int RegionUserID { get; set; } 

    [Key] 
    [Column(Order = 1)] 
    public int RegionID { get; set; } 

    [Key] 
    [Column(Order = 2)] 
    public int ZicyzUserID { get; set; } 

    public DateTime? DateAllocated { get; set; } 

    public DateTime? DateRemoved { get; set; } 

    public bool IsActive { get; set; } 

    public virtual Region Region { get; set; }  

    [NotMapped] 
    public virtual Employee ZicyzUser { get; set; } 
} 

我的目標是過濾掉不活動的用戶,而不是從我標記刪除的用戶爲無效,即IsActive = false;表刪除條目...

我取得了這樣的過濾:

public Region GetRegionDetails(int regionID) 
    { 
     Region region = Regions.Where(r => r.RegionID == regionID).FirstOrDefault(); 

     Entry(region).Collection(r => r.RegionUsers).Query().Where(ru => ru.IsActive == true).Load(); 

     return region; 
    } 

這將填補RegionUsers收集所有RegionUser個標有IsActive = true的實體。這意味着,那些標記爲非活動從獲取離開我們:)

但是,如果我決定要更新任何RegionUser實體IsActive = false的變化反映了RegionUsers收集的,但問題是該集合仍然包含我想過濾的項目。

我已閱讀,Entry(Regions).Reload()應該從數據庫中進行讀取,遺憾的是不發生,我還是最終堅持的「無效」的項目,就不會離開:(

請幫助:)

謝謝!

Nermin。

+0

CTP5是過時的版本。你應該使用EF 4.1RC – 2011-03-30 14:40:52

+0

嗨拉迪斯拉夫,其實我使用4.1 RC,對不起誤導:( – bignermo 2011-03-31 05:29:18

回答

0

Reload只會再次加載主要實體,但不會加載其導航屬性。導航屬性被加載,並且不會因重新加載父項而受到影響。

你可以嘗試做到這一點(不知道這是否有助於):

var inactiveUser = GetInactiveUser(region); 
context.Entry(inactiveUser).State = EntityState.Detached; 
+0

這很酷,但我看不到它是什麼?我試圖重新加載導航屬性,即ICollection '最初導航屬性根本不會被過濾,我只需要告訴'this.Configuration.ProxyCreationEnabled = false; ',以避免加載未經過濾的導航道具,然後在我的' GetRegionDetails(int regionID)'方法我能夠過濾,但只有第一次:(也許屬性'Detached'可以在'ICollection'中扮演一個角色?! – bignermo 2011-03-31 05:35:20

+0

我最終完全將ICollection從實體'Region'並手動加載集合。這是一種解決方法,但我仍在尋求解決方法來重新加載相關實體。 – bignermo 2011-04-01 08:05:08