DbContextでEF4.3を使用しています。
キャッシュに保存するエンティティがあるので、リストに変換してキャッシュにポップする前に、必要なデータを熱心にロードする必要があります。
私のデータベースは正規化されているため、データは複数のテーブルに分散しています。基本エンティティは「ユーザー」であり、ユーザーは「サブスクライバー」である場合とそうでない場合があり、サブスクライバーは「寄稿者」、「メンバー」、「管理者」の3つのタイプのいずれかになります。
現在、EFに関する知識が不足しているため、フェッチ全体はあまりエレガントではありません。Linqetal。
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メソッドの1つの例で更新されました
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();
}