gpt4 book ai didi

c# - Azure 移动服务 Tablecontroller updateAsync 最终出现内存不足异常

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:35 24 4
gpt4 key购买 nike

当我运行一个运行 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,然后感觉它开始循环所有相关实体并开始更新它们。我该如何解决这个问题?也许我应该重新考虑我的继承权

更新 1:经过进一步调查,它似乎在我没有要求的情况下加载了所有相关实体。为什么会发生这种情况?

最佳答案

尽管延迟加载很有趣,但由于这个原因它也可能很危险。我个人更喜欢禁用延迟加载并使用 IQueryable<T>.Include方法仅包含与查询相关的相关实体,否则您可能会意外地拉取整个数据库。您可以在 MobileServiceContext 构造函数中关闭延迟加载:

    public MobileServiceContext() : base(connectionStringName)
{
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
}

您可以找到一个使用IQueryable<T>.Include()的不错的例子完成急切加载here .

希望这就是您正在寻找的!

关于c# - Azure 移动服务 Tablecontroller updateAsync 最终出现内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36662258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com