簡體   English   中英

在實體框架中有條件地包含()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM