我正在使用EF4.3和DbContext。有條件地在實體框架中包含()
我有一個存儲在緩存中的實體,因此我需要在轉換爲列表並將其彈出緩存之前加載必要的數據。
我的數據庫是標準化的,因此數據分佈在多個表格上。基本實體是「用戶」,用戶可以是也可以不是「訂戶」,訂戶可以是「貢獻者」,「成員」或「管理員」3種類型中的一種
目前整個提取不是由於我在EF中缺乏知識而非常優雅,Linq et al。
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();
}
個人而言,我不介意這一點。我不知道我有多喜歡可以獲得其他實體的實體的方法。我不會親自這樣做,因爲我喜歡我的實體純粹和乾淨的數據存儲。我不寫這個作爲答案,因爲這是意見。我認爲如果它適合你,並且它的可讀性好,它很好。我始終在考慮這一點:根據需要更改您的功能代碼。不只是因爲你認爲它看起來很醜?總會有更大的魚在那裏f魚。 –
你能展示一個「Get ...」方法嗎? – Slauma
@Slauma添加了一個例子 – dotnetnoob