我正在考虑是否在开始我刚刚开始的新应用程序时从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;
}
这会在RegionUsers
集合中填充标有RegionUser
的所有IsActive = true
个实体。这意味着标记为非活动的那些将被我们取走:)
但是,如果我决定使用RegionUser
更新任何IsActive = false
个实体,则更改会反映在RegionUsers
集合中,但问题是该集合仍包含我的项目希望过滤掉。
我已经读过Entry(Regions).Reload()
应该从数据库执行读取,遗憾的是,这种情况并没有发生,我仍然最终坚持不会离开的“非活动”项目:(
请帮助:)
谢谢!
Nermin。
答案 0 :(得分:0)
没有。 Reload
将仅重新加载主要实体,但不会再加载其导航属性。加载导航属性,不受重新加载父项的影响。
您可以尝试这样做(不确定这是否有帮助):
var inactiveUser = GetInactiveUser(region);
context.Entry(inactiveUser).State = EntityState.Detached;