当我运行一个运行updateAsync(id,patch)
的补丁方法时,我最终得到的是一个无限的引用循环,然后在服务器因内存不足异常而崩溃的情况下停止。
所以我有模特
public class User : EntityData
{
public string Username { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
public virtual ICollection<Foo> Foos { get; set; }
}
public class Bar: EntityData
{
public string FooId { get; set; }
public string UserId { get; set; }
public enum enumStatus { get; set; }
public virtual Foo Foo { get; set; }
public virtual User User { get; set; }
}
public class Foo: EntityData
{
public string Title { get; set; }
public string UserId { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
public virtual User User { get; set; }
}
并且tablecontroller补丁操作看起来像这样
public Task<Bar> PatchInvited(string id, Delta<Bar> patch)
{
return UpdateAsync(id, patch);
}
所以我尝试修补Bars enumstatus,然后感觉它开始循环遍历所有相关的entites并开始更新它们。 我怎么解决这个问题?也许我应该重新考虑我的遗产
更新1:经过进一步调查后,似乎在没有我要求的情况下加载所有相关实体。为什么会这样?
答案 0 :(得分:0)
像延迟加载一样有趣,因此这可能很危险。我个人更喜欢禁用延迟加载并使用IQueryable<T>.Include
方法仅包含与查询相关的相关实体,否则您可能会意外地最终拉动整个数据库。您可以在MobileServiceContext构造函数中关闭延迟加载:
public MobileServiceContext() : base(connectionStringName)
{
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
}
您可以找到使用IQueryable<T>.Include()
来完成预先加载here的合适示例。
希望这就是你要找的东西!