[英]Conditionally Include() in Entity Framework
我正在使用帶有DbContext的EF4.3。
我有一個存儲在緩存中的實體,因此我需要在轉換為列表並將其彈出緩存之前急切加載必要的數據。
我的數據庫已規范化,因此數據分布在多個表中。 基本實體是“用戶”,用戶可能是也可能不是“訂閱者”,訂閱者可以是“貢獻者”,“成員”或“管理員”3種類型之一
由於我缺乏對EF,Linq等人的知識,目前整個獲取並不是很優雅。
public static User Get(Guid userId)
{
Guard.ThrowIfDefault(userId, "userId");
var r = new CrudRepo<User>(Local.Items.Uow.Context);
var u = r.FindBy(x => x.UserId == userId)
.Include("BookmarkedDeals")
.Include("BookmarkedStores")
.SingleOrDefault();
if (u.IsNotNull() && u.IsActive)
{
if (u.IsAdmin)
{
u.GetAdministrator();
}
else if (u.IsContributor)
{
u.GetContributor();
}
else if (u.IsMember)
{
u.GetMember();
}
else
{
string.Format("Case {0} not implemented", u.UserRoleId)
.Throw<NotImplementedException>();
}
}
return u;
}
每個“Get”方法都獲得一個Subscriber實體以及角色類型的相關Include()實體。
我很確定它可以比這更好地完成,但是在最初的思考過程中掙扎。
有人幫嗎?
更新了其中一個Get方法的示例
public static void GetMember(this User user)
{
Guard.ThrowIfNull(user, "user");
var r = new ReadRepo<Subscriber>(Local.Items.Uow.Context);
user.Subscriber = r.FindBy(x => x.UserId == user.UserId)
.Include("Kudos")
.Include("Member.DrawEntries")
.Include("Member.FavouriteCategories")
.Include("Member.FavouriteStores")
.Single();
}
如果“用戶”實體已連接到其他實體,則可以使用已連接實體集合的“加載”方法來獲取相關實體。 例如,如果您的“用戶”實體具有屬性“訂閱者”,則可以調用u.Subscriber.Load()來獲取相關實體。 這是相關的MSDN文章
var u = r.FindBy(x => x.UserId == userId)
.Include("BookmarkedDeals")
.Include("BookmarkedStores")
.SingleOrDefault();
if(someCondition)
{
u = u.Include("something");
}
沒有地方可以測試這個,但你試過嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.