【发布时间】:2011-03-30 14:20:32
【问题描述】:
我正在考虑是否在我刚开始的新应用程序的开发中退出EF 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;
}
这将使用标记为IsActive = true 的所有RegionUser 实体填充RegionUsers 集合。这意味着那些标记为非活动的我们将无法获取:)
但是,如果我决定使用IsActive = false 更新任何RegionUser 实体,则更改会反映在RegionUsers 集合中,但问题是该集合仍然包含我希望过滤掉的项目。
我已经读到Entry(Regions).Reload() 应该从数据库中读取,不幸的是这并没有发生,我最终还是被那些不会离开的“非活动”项目卡住:(
请帮忙:)
谢谢!
Nermin.
【问题讨论】:
-
CTP5 版本过时。您应该使用 EF 4.1RC
-
嗨,Ladislav,实际上我使用的是 4.1 RC,抱歉误导:(
标签: entity-framework entity-framework-ctp5