我将 EF4.3 与 DbContext 一起使用。
我有一个存储在缓存中的实体,因此在转换为列表并将其弹出缓存之前,我需要预先加载必要的数据。
我的数据库已标准化,因此数据分布在多个表中。基本实体是“用户”,用户可能是也可能不是“订阅者”,订阅者可以是“贡献者”、“成员”或“管理员”三种类型之一
由于我缺乏 EF、Linq 等方面的知识,目前整个 fetch 不是很优雅。
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”方法都获取一个订阅者实体以及角色类型的相关 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();
}