2013-06-20 20 views
0

我延長我的EF上下文inlcude Mission實體有RequiredAttribute的所有屬性:是否可以在上下文中僅包含必需的屬性?

public static IQueryable<Mission> MissionWithRequired(this IDbContext context) 
{ 
    return context.Missions 
      .Include(mission => mission.Theme) 
      .Include(mission => mission.Contact) 
      .Include(mission => mission.Editor); 
} 

其正常工作。

重構它的想法 - 使其不僅可以與Missions一起使用,還可以與其他實體一起使用。

我的第一步是使用Reflection來讀取標記爲RequiredAttribute的屬性。但它不工作:

public static IQueryable<Mission> MissionWithRequired(this IOrgDatenbankContext context) 
{ 
    var requiredProperties = typeof(Mission).GetProperties() 
      .Where(property => Attribute.IsDefined(property, typeof(RequiredAttribute))); 

    foreach (var requiredProperty in requiredProperties) 
    { 
     context.Missions.Include(requiredProperty.Name); 
    } 

    return context.Missions; 
} 

context包含Missions但不ThemeContractEditor

回答

1

儘量節省每一個包括局部變量(抱歉,但我無法證實這個作品)

public static IQueryable<Mission> MissionWithRequired(this IOrgDatenbankContext context) 
{ 
    var requiredProperties = typeof(Mission).GetProperties() 
      .Where(property => Attribute.IsDefined(property, typeof(RequiredAttribute))); 

    IQueryable<Mission> result = context.Missions; 
    foreach (var requiredProperty in requiredProperties) 
    { 
     result = result.Include(requiredProperty.Name); 
    } 

    return result; 
} 
+0

thnaks for you post。將信息存儲在局部變量中會達到什麼目的? – MikroDel

+0

您應該獲得所有'Include'的**複合**結果。 'Include()'本身不做任何事情,它會返回'IQueryable'的修改實例。在你的第一個代碼示例中,你調用'Include',將修改過的'IQueryable'傳遞給第二個'Include'等流暢的API。在第二個代碼示例中,您不會對從調用返回到Include的修改的'IQueryable'執行任何操作。 – qujck

+0

upvote =)我會在接下來的幾天嘗試它 - 導致代碼的其他部分也應該更新..我會在後面給我反饋。 – MikroDel

相關問題