У меня есть Entity Framework, и он отлично работает в большинстве случаев, когда мне это нужно. У меня есть такая структура
public partial class Topic : Entity
{
public Guid Id { get; set; }
public string Name { get; set; }
public DateTime CreateDate { get; set; }
public virtual Post LastPost { get; set; }
public virtual Category Category { get; set; }
public virtual IList<Post> Posts { get; set; }
public virtual IList<TopicTag> Tags { get; set; }
public virtual MembershipUser User { get; set; }
public virtual IList<TopicNotification> TopicNotifications { get; set; }
public virtual IList<Favourite> Favourites { get; set; }
public virtual Poll Poll { get; set; }
}
Как вы можете видеть, у меня есть ряд связанных объектов, которые являются списками. Они отображаются как стандартные и ленивы загружены, поэтому я могу вызвать Topic.Posts или Topic.TopicNotifications и т.д. (Сопоставления ниже)
HasOptional(t => t.LastPost).WithOptionalDependent().Map(m => m.MapKey("Post_Id"));
HasOptional(t => t.Poll).WithOptionalDependent().Map(m => m.MapKey("Poll_Id"));
HasRequired(t => t.Category).WithMany(t => t.Topics).Map(m => m.MapKey("Category_Id"));
HasRequired(t => t.User).WithMany(t => t.Topics).Map(m => m.MapKey("MembershipUser_Id"));
HasMany(x => x.Posts).WithRequired(x => x.Topic).Map(x => x.MapKey("Topic_Id")).WillCascadeOnDelete();
HasMany(x => x.TopicNotifications).WithRequired(x => x.Topic).Map(x => x.MapKey("Topic_Id")).WillCascadeOnDelete();
HasMany(t => t.Tags)
.WithMany(t => t.Topics)
.Map(m =>
{
m.ToTable("Topic_Tag");
m.MapLeftKey("TopicTag_Id");
m.MapRightKey("Topic_Id");
});
Это все хорошо. Но в нескольких случаях мне нужно вручную заполнить темы. Пост и тема. Затрачены.
Но если я попытаюсь установить Topic.Posts = SomeCollection
, он запускает ленивую загрузку и сначала загружает все записи, а затем позволяет мне установить мою коллекцию, поэтому я получаю два набора исполняемых sql (первое, что мне не нужно)
В любом случае, отключить ленивую загрузку вручную по требованию только тогда, когда я хочу установить коллекцию вручную?
Надеюсь, что это имеет смысл...:/