2013-06-25 53 views
0

我使用帶有自我跟蹤實體的EF5 Code First。我如何確保僅加載了我的類別實體的相關產品節點,即IsDeleted == false?我使用EF Power Tools創建了模型,並希望在模型映射類的某處(MyContext : DbContextProductMap : EntityTypeConfiguration<Product>)中存儲此額外的查詢條件。每次訪問Category類的Products屬性時,只應加載未刪除的產品。謝謝你的幫助!EF5:僅加載未刪除的相關記錄(IsDeleted = false)

回答

1

在你的情況下,您可以添加返回您查詢的方法:

public class MyContext: DbContext 
{ 
    public DbSet<Entity> Entities {get;set;} 

    public IQueryable<Entity> NonDeletedEntities() 
    { 
     return this.Entities.Where(e => e.IsDeleted == false); 
    } 
} 

現在你可以消耗該查詢,並與其他條件聚集它,他們都將被查詢

new MyContext().NonDeletedEntities().Where(e => e.Name == "Philippe"); 

//is the same as 
new MyContext().Entities.Where(e => e.IsDeleted == false && e.Name == "Philippe"); 

UPDATE

如您的評論所述,如果您想從類別實體中訪問未刪除的產品

public class Category 
{ 
    public virtual ICollection<Product> Products { get; set; } 
    public IQueryable<Products> NonDeletedProductts() 
    { 
     return this.Products.Where(e => e.IsDeleted == false); 
    } 
} 

我沒有測試過這個,但它應該工作。

+0

謝謝。這是預先過濾軟刪除實體的常用方法嗎?如果可以在兩個實體之間的關係中的某個地方指定查詢,我會首選的,例如,在這裏this.HasRequired(t => t.Category).WithMany(t => t.Products).HasForeignKey(d => d.CategoryId);'。您描述它的方式,我每次訪問'Category'類中的'Products'屬性時都必須查詢'IsDeleted'屬性。 – Philippe

+0

如果在實體本身上使用相同的方法,則該方法將起作用。 – Jay