Вы захотите разделить его на несколько запросов, чтобы повысить производительность. Для этого можно использовать явную загрузку. Это не самое красивое решение, но оно работает. Надеюсь, в EF 5 появится более простое решение.
Я немного догадываюсь, какие поля являются коллекциями, а какие - «обычными» записями, но примерно так:
var activity = await _ctx.Activities.FindAsync(Id);
await context.Entry(activity)
.Collection(a => a.Attributes)
.LoadAsync();
await context.Entry(activity)
.Collection(a => a.Roles)
.LoadAsync();
await context.Entry(activity)
.Collection(a => a.Bookmarks)
.LoadAsync();
await context.Entry(activity)
.Collection(a => a.VideoMetas)
.Query()
.Include(vm => vm.Instances)
.LoadAsync();
await context.Entry(activity)
.Collection(a => a.ImageMetas)
.Query()
.Include(im => im.Instances)
.LoadAsync();
await context.Entry(activity)
.Reference(a => a.Procedure)
.Query()
.Include(p => p.Attributes)
.LoadAsync();
return activity;