2011-03-30 2 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;, 비활성으로 삭제 된 사용자를 표시 테이블에서 항목을 삭제하는 대신 비활성 사용자를 필터링하는 것입니다 ...

I : 여기

내 상황입니다 이 같은 필터링 달성 :

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 수집을 채울 것입니다엔티티는 IsActive = true으로 표시됩니다. 그게 내가 변화가 RegionUsers 수집에 반영됩니다 IsActive = falseRegionUser 개체 중 하나를 업데이트하기로 결정하지만 문제가있는 경우 컬렉션이 여전히 포함되어 비활성으로 표시 사람들은, :)

그러나 페치에서 우리를 남아 있다는 것을 의미한다 내가 걸러 내고 싶은 아이템.

나는 Entry(Regions).Reload()이 발생하지 않는 불행하게도, 데이터베이스에서 읽기를 수행해야하고 나는 여전히 :(

가 : 도와주세요 떠나지 않을 것 그 "비활성"항목 붙어 결국 읽었습니다

감사합니다.

Nermin.

+0

CTP5 오래된 버전입니다. 당신은 EF 4.1RC –

+0

안녕 Ladislav, 실제로 4.1 RC를 사용하고있다 misinforming에 대한 미안해 : ( – bignermo

답변

0

No. Reload은 주요 항목 만 다시로드하지만 탐색 속성은 다시로드하지 않습니다. 탐색 속성은로드되고 부모를 다시로드하면 영향을받지 않습니다.

이가 (확실하지 않은이 도움이된다면) 수행하려고 할 수 있습니다

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

멋지 네요하지만 나는 무엇을 볼 수 없습니까? 네비게이션 속성 즉, 'ICollection '처음에는 네비게이션 속성이 전혀 필터링되지 않을 것입니다. 먼저 필터링되지 않은 nav prop가로드되는 것을 피하기 위해 컨텍스트의 생성자에 this.Configuration.ProxyCreationEnabled = false; ' GetRegionDetails (int regionID)'메소드 필자는 처음에는 필터링 할 수있었습니다 :(아마도 '분리 된'속성은'ICollection'과 함께 역할을 할 수 있습니까?) – bignermo

+0

나는 ICollection을 엔티티'Region'을 호출하고 수동으로 콜렉션을로드하는 방법이 있습니다.하지만 해결 방법이지만 관련 엔티티를 다시로드하는 방법에 대한 해결책을 찾고 있습니다. – bignermo