我有实体框架设置,它大多数时候我需要它工作正常。我有这样的结构实体框架 - 停止延迟加载相关实体按需?
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和Topic.Favorites。
但是,如果我尝试设置Topic.Posts = SomeCollection
它触发延迟加载并加载所有的职位,然后再让我把我的收藏,所以我得到了两套执行的SQL(第一次我不希望)
无论如何,只要手动设置集合,就可以根据需要手动关闭延迟加载?
希望是有道理的...:/
我感觉XY问题在这里http://meta.stackexchange.com/a/66378/134199 - 我认为你的真正问题是这个“需要手动填充Topic.Posts和Topic.Favorites”。你可能正在尝试做一些以不同方式更好地完成的事情,因为你所做的事没有任何意义。你想要做什么?为什么? –
我会第二个@ErikFunkenbusch在说什么。为什么需要手动重新创建帖子和收藏夹集合? –
如果你回答你正在做的事情,那么我们可能真的可以帮助你解决你真正的问题。不是你认为你有的问题,因为你认为你必须做一件特别的事情来解决你的问题问题。 –